1. 程式人生 > >WPF防止重復運行實例

WPF防止重復運行實例

env num event ons esb port str 12px lai

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);    
}    

  

  1. /// <summary>
  2. /// App.xaml 的交互邏輯
  3. /// </summary>
  4. public partial class App : Application
  5. {
  6. System.Threading.Mutex mutex;
  7. public App()
  8. {
  9. this.Startup += new StartupEventHandler(App_Startup);
  10. }
  11. void App_Startup(object sender, StartupEventArgs e)
  12. {
  13. bool ret;
  14. mutex = new System.Threading.Mutex(true, "ElectronicNeedleTherapySystem", out ret);
  15. if (!ret)
  16. {
  17. MessageBox.Show("已有一個程序實例運行");
  18. Environment.Exit(0);
  19. }
  20. }
  21. }

WPF防止重復運行實例