C# 程序只允许运行一个实例的正确代码

来源:互联网 发布:幼儿园大班美工公开课 编辑:程序博客网 时间:2024/05/15 23:43

不得不感叹一下天下代码一大抄,到百度上一搜,结果都是如下的代码。

[STAThread]        static void Main()        {            //只允许运行一个程序            bool createNew;            System.Threading.Mutex  mutex = new System.Threading.Mutex                (true, "Global\\" + Application.ProductName, out createNew);            {                if (createNew)                {                    Application.EnableVisualStyles();                    Application.SetCompatibleTextRenderingDefault(false);                    Application.Run(new Form1());                }                else                {                    MessageBox.Show("只允许运行一个程序!");                }            }        }
恐怕大家找到的和这大同小异,很可惜,这段代码DEBUG模式下没问题,在RELEASE却没有成功,

问题原因是Mutex被声明为一个局部变量,在relese模式下由于优化问题,可能由于编译器认为Mutex不再被

使用,被回收了,正确的代码如下,本人测试过

static System.Threading.Mutex mutex;        [STAThread]        static void Main()        {            //只允许运行一个程序            bool createNew;            mutex = new System.Threading.Mutex                (true, "Global\\" + Application.ProductName, out createNew);            {                if (createNew)                {                    Application.EnableVisualStyles();                    Application.SetCompatibleTextRenderingDefault(false);                    Application.Run(new Form1());                }                else                {                    MessageBox.Show("只允许运行一个程序!");                }            }        }

原创粉丝点击