小文——在C# WinForm中如何使当前应用程序只允许启动一个实例

时间:2022-08-29 19:35:21

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

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

[STAThread]
static   void  Main()
{
    
bool  createNew;
    
using  (System.Threading.Mutex m  =   new  System.Threading.Mutex( true , Application.ProductName,  out  createNew))
    {
        
if  (createNew)
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(
false );
            Application.Run(
new  Form1());
        }
        
else
        {
            MessageBox.Show(
" Only one instance of this application is allowed! " );
        }
    }
}

 

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

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