WPF防止重複執行例項
阿新 • • 發佈:2018-11-11
原文:
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);
- }
- }
- }