互斥锁防止程序被多次打开

来源:互联网 发布:想做淘宝客服怎么找 编辑:程序博客网 时间:2024/04/30 14:54
            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模式下可以正确的判断互斥锁的存在了。