注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Hao的博客

I'm on my way……

 
 
 

日志

 
 
 
 

应用程序每次只能运行一个实例(C#)续  

2010-03-30 14:30:15|  分类: 编程杂记 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

      在上一篇文章中我曾提到,用比较进程相应信息是否一致的方法来判断一个应用程序是否已经有实例在运行,我也提到了这种方法的弊端。恰好今天在学习线程和同步时学到了一个更好的方法,而这个方法就是使用Mutex类。Mutex是.NET Framework中提供同步访问多个进程的类,每次只有一个线程可以获得互斥锁定。而操作系统知道有名称的互斥锁定,所以互斥锁定就可以在一个进程中定义,被其它进程所共享,而且Mutex的构造函数还提供了互斥锁定是否存在的信息。既然如此,我们就可以在应用的程序启动进程中定义一个具有特定名称的互斥锁定,每次启动进程时就检查特定名称的互斥锁定是否已经定义,如果是则说明应用程序已有实例在运行。

      基于上面的思想,Main函数中的代码如下:

static class Program
{
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>

        [STAThread]
        static void Main()
        {
            bool createdNew;   //第三个参数用于返回特定名称的互斥锁定是否存在
            Mutex mutex = new Mutex(false, "ProCharpMutex", out createdNew);
            if (!createdNew) {
                MessageBox.Show("An instance has already runned!"); //可以进行激活和显示的操作
                Application.Exit();
                return;
            }
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }

  评论这张
 
阅读(399)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017