我经常编写只支持一个实例的.net应用程序.以前我使用.net-remoting和现在的WCF来检测我的应用程序的实例是否正在运行并将焦点放在此实例上.
我的问题是,如果有.net4可用于实现单实例应用程序的更好的解决方案(或者通常有更好的解决方案可用,因为在应用程序的最开始加载WCF或远程处理程序集会对性能产生不良影响)
更新
谢谢你的所有帖子.我最初的问题的答案似乎是" 不,在.net 4中实现单实例应用程序没有什么新东西 ".
感谢所有附加信息,我将更改当前项目以使用Mutex提供所需的功能.我接受了鲍勃摩尔的答案,因为它附有最多的信息,但感谢所有发布有用信息的人.
Bob*_*ore 11
传统的方法是使用互斥锁,例如
bool bNew = true;
using (Mutex mutex = new Mutex(true, "MYAPP_0D36E4C9-399D-4b05-BDA3-EE059FB77E8D", out bNew))
{
if (bNew)
{
// blah, blah,
Application.Run(new MainForm());
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:
我发现此代码可以在线调用SetForegroundWindow,因此您可以找到应用程序的其他实例并将其转发:
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SetForegroundWindow(IntPtr hWnd);
Process me = Process.GetCurrentProcess();
foreach (Process process in Process.GetProcessesByName (me.ProcessName))
{
if (process.Id != me.Id)
{
SetForegroundWindow (process.MainWindowHandle);
break;
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,在现代Windows实现中,您只能放弃前景.