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