cqtrq
2017-01-16 13:54
采纳率: 97.1%
浏览 1.4k
已采纳

关于Mutex限制应用程序重复启动的问题

大伙帮忙看看以下代码,整个程序按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);
            }
        }
    }
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • weixin_35997138 2017-01-16 14:44
    已采纳

    ㄜ....

    我這邊根據你提供samplecode 下執行後,在Release 執行.exe 只可以點擊執行一次,因為你已經用Mutex 保護該Process執行,
    所以你能夠執行多次實屬怪異...
    你確定你執行.exe檔 是一樣的嗎??

    点赞 打赏 评论
  • 奔跑的小鱼儿 2017-01-17 01:23

    你这flag是不是其他地方还用到了,换一下名字

    点赞 打赏 评论
  • cqtrq 2017-01-19 14:55

    图片说明
    今天测试居然最多启动了5个应用,第6个才弹出消息框,彻底晕了。。。

    点赞 打赏 评论
  • cqtrq 2017-01-20 13:09

    再次验证了,用最简单的Application.Run(new Form1())测试,并在窗体加载时添加如下的延时语句,Mutex机制瓦解了。。。我只是一个业余编程爱好者。。。大牛们帮忙解答下,谢啦

    private void Form1_Load(object sender, EventArgs e)
    {
    System.Threading.Thread.Sleep(60000 * 2);
    }
    
    点赞 打赏 评论

相关推荐 更多相似问题