码迷,mamicode.com
首页 > 其他好文 > 详细

C# 中判断程序是否启动使用Mutex使用异常

时间:2014-08-20 22:29:22      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   使用   os   for   div   代码   

【背景】

  在最近的一个项目中,我负责客户端模块的工作。需求要求,在启动客户端时需要判断客户端是否已经启动(单例)。于是我决定使用Mutex来实现此功能,代码如下:

            bool initiallyOwned = true;
            bool isCreated;
            Mutex m = new Mutex(initiallyOwned, "xxxxx", out isCreated);
            if (!(initiallyOwned && isCreated))
            {
                Common.MessageEx.Msg("客户端已经启动!");
                return;
            }

此功能在大多数情况下,能够很好的实现判断客户端是否已经启动。

【新的需求】

  NND,有一天来了一个变态(BT)的需求,客户端主窗体弹出子窗体后,子窗体需要支持最小化,子窗体最小化的同时主窗体需要同时最小化,主窗体还原时子窗体还原(我真想说一句,你大爷的,操作系统也没有实现过这么BT的需求呀)。

【Mutex异常】

  经过一番折腾,终于实现了BT的需求。偶然一次操作,当我在客户端弹出子窗体后,将系统最小化,然后我又去运行启动一个新的客户端。眼前一幕把我吓尿了————NND尽然能够正常启动。

【解决】

  最后程序调试,我发现当客户端已经启动时,并且处于上述操作过程中,再次启动客户端,Mutex是能够创建的。所以我只能做如下处理来实现(单例):

    

       int i = 0;
            Process[] pros = Process.GetProcesses();
            foreach (Process p in pros)
            {
                if (p.ProcessName.Equals("xxxxx"))
          {
          
++i;
          }
         
if (i > 1) { break; }
       }

if (i>1)
{
       Common.MessageEx.Msg(
"客户端已经启动!");
      
return;
      }

【Mutex为什么不能判断】

   至于Mutex为什么不能判断,暂时还没有想通,希望通过此博客与大家共同交流!!!

 

C# 中判断程序是否启动使用Mutex使用异常,布布扣,bubuko.com

C# 中判断程序是否启动使用Mutex使用异常

标签:style   blog   color   使用   os   for   div   代码   

原文地址:http://www.cnblogs.com/ITCommunication/p/3925591.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!