在.NET(而不是Windows窗体或控制台)下使用C#和WPF ,创建只能作为单个实例运行的应用程序的正确方法是什么?
我知道这与一些叫做互斥的神秘事物有关,我很少能找到一个不愿意停下来解释其中一个是什么的人.
代码还需要通知已经运行的实例用户尝试启动第二个,并且如果存在任何命令行参数,也可以传递.
我正在使用此代码阻止我的程序的第二个实例同时运行,是否安全?
Mutex appSingleton = new System.Threading.Mutex(false, "MyAppSingleInstnceMutx");
if (appSingleton.WaitOne(0, false)) {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
appSingleton.Close();
} else {
MessageBox.Show("Sorry, only one instance of MyApp is allowed.");
}
Run Code Online (Sandbox Code Playgroud)
我担心如果有什么东西抛出一个异常并且应用程序崩溃了Mutex仍然会被保留.真的吗?
我经常编写只支持一个实例的.net应用程序.以前我使用.net-remoting和现在的WCF来检测我的应用程序的实例是否正在运行并将焦点放在此实例上.
我的问题是,如果有.net4可用于实现单实例应用程序的更好的解决方案(或者通常有更好的解决方案可用,因为在应用程序的最开始加载WCF或远程处理程序集会对性能产生不良影响)
更新
谢谢你的所有帖子.我最初的问题的答案似乎是" 不,在.net 4中实现单实例应用程序没有什么新东西 ".
感谢所有附加信息,我将更改当前项目以使用Mutex提供所需的功能.我接受了鲍勃摩尔的答案,因为它附有最多的信息,但感谢所有发布有用信息的人.