原文:
WPF防止重复运行实例
1、方法一
在app.xaml.cs下添加如下代码:
/// <summary> /// App.xaml 的交互逻辑 /// </summary> public partial class App : Application { System.Threading.Mutex mutex; public App() { this.Startup += new StartupEventHandler(App_Startup); } void App_Startup(object sender, StartupEventArgs e) { bool ret; mutex = new System.Threading.Mutex(true, "ElectronicNeedleTherapySystem", out ret); if (!ret) { MessageBox.Show("已有一个程序实例运行"); Environment.Exit(0); } } }
二、方法二
1.通过查找process的方法来控制应用程序启动。 PS:这个方法有bug:在多用户登录后,只有一个用户可以正常启动程序,也就是说,进程是跨用户的。 [java] view plain copy int processCount = Process.GetProcessesByName("windowWPF").Where(o => o.Id != Process.GetCurrentProcess().Id).Count(); if (processCount > 1) Environment.Exit(0); 2. 注意mutex不能被回收,否则就无法发挥作用了。 [java] view plain copy bool ret; using (System.Threading.Mutex mutex = new System.Threading.Mutex(true, "WpfMuerterrrterterttex", out ret)) { if (!ret) Environment.Exit(0); }
- /// <summary>
- /// App.xaml 的交互逻辑
- /// </summary>
- public partial class App : Application
- {
- System.Threading.Mutex mutex;
- public App()
- {
- this.Startup += new StartupEventHandler(App_Startup);
- }
- void App_Startup(object sender, StartupEventArgs e)
- {
- bool ret;
- mutex = new System.Threading.Mutex(true, "ElectronicNeedleTherapySystem", out ret);
- if (!ret)
- {
- MessageBox.Show("已有一个程序实例运行");
- Environment.Exit(0);
- }
- }
- }