大伙帮忙看看以下代码,整个程序按Release编译通过,但点击运行bin\Release目录下的应用程序EXE文件,居然可以连续启动3个,第4个开始弹出消息“本程序已经启动了,不能再重复运行!”,啥原因?困惑中。。。
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
bool flag = false;
Mutex mutex = new Mutex(true, System.Diagnostics.Process.GetCurrentProcess().ProcessName, out flag);
if (flag)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new FormStockTrading());
}
else
{
MessageBox.Show("本程序已经启动了,不能再重复运行!");
Environment.Exit(1);
}
}
}
ㄜ....
我這邊根據你提供samplecode 下執行後,在Release 執行.exe 只可以點擊執行一次,因為你已經用Mutex 保護該Process執行,
所以你能夠執行多次實屬怪異...
你確定你執行.exe檔 是一樣的嗎??
你这flag是不是其他地方还用到了,换一下名字
今天测试居然最多启动了5个应用,第6个才弹出消息框,彻底晕了。。。
再次验证了,用最简单的Application.Run(new Form1())测试,并在窗体加载时添加如下的延时语句,Mutex机制瓦解了。。。我只是一个业余编程爱好者。。。大牛们帮忙解答下,谢啦
private void Form1_Load(object sender, EventArgs e)
{
System.Threading.Thread.Sleep(60000 * 2);
}
你这个 Mutex mutex 是局部变量,会被系统销毁。
改成 class Program 的成员:
static class Program
{
static Mutex mutex;