bool createdNew;
var mutex = new Mutex(false, "CC_Client", out createdNew);
if (createdNew)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new FormMain());
mutex.Close();
}
当代码中没有mutex.Close();这句时,Debug模式下程序可以正常的判断互斥锁已经存在,从而防止程序被多次运行。但是在Release模式下,每次开启程序的时候,互斥锁的判断都是不存在,程序可以被任意次打开。
Debug模式下,为了便于调试,互斥锁的生存期被人为的延长了。因此可以成功的判断互斥锁的存在。但是Release模式下,由于mutex在随后的代码中没有被调用过,当它被创建成功之后就立刻被释放了。因此每次对它的判断都是不存在。
添加了mutex.Close();后,由于对此对象存在调用,因此在Application.Run(new FormMain());结束之前,mutex都不会被释放。Release模式下可以正确的判断互斥锁的存在了。