C#应用程序只运行一个实例的代码

本文介绍了一种利用Mutex防止应用程序多次运行的方法,并提供了一个简单的示例代码。通过创建一个带有唯一名称的Mutex实例,可以确保同一时刻只有一个应用程序实例处于活跃状态。此外,还讨论了如何在第二次打开软件时激活首个实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PS: Mutex 必须是静态的,这样才能跨进程
另外mutex的实例名,一般用进程名,这样其实也不是太好,我的解决方法是取GUID
Attribute guid_attr = Attribute.GetCustomAttribute(Assembly.GetExecutingAssembly(), typeof(GuidAttribute));
string guid = ((GuidAttribute)guid_attr).Value;

 

这样应该就比较完美了原贴:http://blog.youkuaiyun.com/billcat/article/details/5317199

 

代码简洁实用,自己看吧。

需要强调的一点就是注意要先声明一个静态的字段Mutex。

 

(网上这样比较多,贴出来主要目的是自己学习留存,大虾们绕道吧...)

 

static System.Threading.Mutex mutex;  //这个静态类型的Mutex是必需的
[STAThread]
static void Main()
{
   bool IsFirstRun;
   string mutexName = "Tray";//Application.ProductName;
   mutex = new System.Threading.Mutex(true, mutexName, out IsFirstRun);
   Application.EnableVisualStyles();
   Application.SetCompatibleTextRenderingDefault(false);
   if (IsFirstRun)
   {
       Application.Run(new MainForm());
       GC.SuppressFinalize(mutex); 
   }
    else
   {
       MessageBox.Show("该程序已经启动!");
   }
            	
}

 

 

有些程序员需要在第二次打开软件的时候,将已打开的第一个实例进程激活为前置程序,上面代码就做不到了,

这时需要在IsFirstRun==false的时候索引当前所有Process找出该实例进程,将其激活就行了。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值