关于C#禁止多个实例程序运行的详细解决

刚遇到同一个程序 禁止多个实例运行 ,第一想到的是 到 msdn 的System.Threading 里去找;找到 Mutex  看看 下面的实例 基本能解决这个问题 ,

public Mutex(      bool initiallyOwned,      string name,      out bool createdNew, MutexSecurity mutexSecurity )
参数

initiallyOwned
类型: System.Boolean 
如果为 true,则给予调用线程已命名的系统互斥体的初始所属权(如果已命名的系统互斥体是通过此调用创建的);否则为 false。
name
类型: System.String 
系统互斥体的名称。如果值为 null,则 Mutex 是未命名的。
createdNew
类型: System.Boolean %
在此方法返回时,如果创建了局部互斥体(即,如果 name 为 null或空字符串)或指定的命名系统互斥体,则包含布尔值 true;如果指定的命名系统互斥体已存在,则为 false。该参数未经初始化即被传递。
mutexSecurity
类型: System.Security.AccessControl.MutexSecurity 
一个 MutexSecurity 对象,表示应用于已命名的系统互斥体的访问控制安全性。  
 

但是不能防止程序改名运行; 然后继续在有关线程类中找 功夫不负有心人,找到了System.Threading.Thread.CurrentThread 作用是 获取当前正在运行的线程。 里面有设置和获取 线程名字的name属性 哈哈 这下都可以完美解决了 完整的代码 应该这样 在主程序 main函数中 这样:

 /// <summary>
                /// 应用程序的主入口点。
                /// </summary>
                [STAThread]
                static void Main()
                {
                        Application.EnableVisualStyles();
                        Application.SetCompatibleTextRenderingDefault(false);
                        bool blnCreate;
                        System.Threading.Thread.CurrentThread.Name = "winform1";
                        System.Threading.Mutex m = new System.Threading.Mutex(true, System.Threading.Thread.CurrentThread.Name, out   blnCreate);
                        if (blnCreate)
                        {
                                Application.Run(new Form1());
                        }
                        else
                        {
                                MessageBox.Show("只能运行一个实例程序");
                        }
                }





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值