需求:
检测同一软件只允许打开一个.
原有代码:
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是一个互斥的对象,同一时间只有一个线程可以拥有它,该类还可用于进程间同步的同步基元。