您的位置:首页 > 编程语言 > C#

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

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


这样应该就比较完美了原贴:/article/11093383.html

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

需要强调的一点就是注意要先声明一个静态的字段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找出该实例进程,将其激活就行了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: