在C# WinForm中如何使当前应用程序只允许启动一个实例(转)

我们在创建C# WinForm应用程序时,有时需要限制用户在同一时间只允许启动一个应用程序实例,例如安装程序包、系统扫描工具等等。当应用程序的一个实例已经处于运行状态时,如果用户企图再启动一个实例,则给用户一个提示并终止该实例。

    这个其实很简单!我们知道,WinForm应用程序都有一个程序运行时的入口点,这点与WebForm应用程序不同,后者需要在任意一个可访问的Page中设置允许用户访问的权限,而WinForm应用程序只需要处理好程序的入口点就可以了。因此我们需要在Program class的Main函数中进行判断和处理。代码如下: 

 

  1. [STAThread] 
  2. static void Main() 
  3.     bool createNew; 
  4.     using (System.Threading.Mutex m = new System.Threading.Mutex(true, Application.ProductName, out createNew)) 
  5.     { 
  6.         if (createNew) 
  7.         { 
  8.             Application.EnableVisualStyles(); 
  9.             Application.SetCompatibleTextRenderingDefault(false); 
  10.             Application.Run(new Form1()); 
  11.         } 
  12.         else 
  13.         { 
  14.             MessageBox.Show("Only one instance of this application is allowed!"); 
  15.         } 
  16.     } 

 

 

 

主要使用了Sytem.Theading.Mutex对象,该对象用于解决多线程操作中的互斥问题,有关它的详细介绍读者可以参考MSDN。

http://msdn.microsoft.com/zh-cn/library/bwe34f1k(VS.80).aspx

posted @ 2013-08-07 10:16  xfyn  阅读(3181)  评论(0编辑  收藏  举报