记录 Mutex互斥锁 踩过的坑

需求:

    检测同一软件只允许打开一个.

 

 

原有代码:

private void Application_Startup(object sender, StartupEventArgs e)
{
    System.Threading.Mutex mutex;
    bool ret;
    mutex = new System.Threading.Mutex(true, "XXX", out ret);//唯一标识
    if (!ret)
    {
        MessageBox.Show("已有一个程序在运行!", Model.PublicData.SoftTitle);
        Environment.Exit(0);
    }
    LoginWindow login = new LoginWindow();
    login.Show();
}

 

结果:

    时灵时不灵;

 

现有代码:

System.Threading.Mutex mutex;
private void Application_Startup(object sender, StartupEventArgs e)
{
    bool ret;
    mutex = new System.Threading.Mutex(true, "XXX", out ret);//唯一标识
    if (!ret)
    {
        MessageBox.Show("已有一个程序在运行!", Model.PublicData.SoftTitle);
        Environment.Exit(0);
    }
    LoginWindow login = new LoginWindow();
    login.Show();
}

 


结果:
    每次可以正常检测到,达到需求;


结论:
    使用Mutex的时候,切记要定义在外层,在内层有时候会判断不准确;


其他:
    C#中Mutex是互斥锁,位于System.Threading 命名空间中。Mutex是一个互斥的对象,同一时间只有一个线程可以拥有它,该类还可用于进程间同步的同步基元。
 

 

相关推荐

网友评论(0)