如何让程序只运行一个实例(转)
如何让程序只运行一个实例
在 CSDN 上以前看到过好几篇说如何让程序只运行一个实例。虽然方法有很多,但是,都很麻烦。
.NET Framework 从 1.1 起就提供了一个 Mutex (互斥体) 的类 (System.Threading)。CSDN 的帖子上也多推荐用它来做。但是有的代码让人很费解,很长。下面是我写的一个方法,代码不超过 15 行。下面的变量和方法定义都在 Program.cs 里。这个文件包含 Main 入口函数,是整个程序的入口。
定义一个静态互斥体:static Mutex InstanceMutex
定义一个静态判断方法。用来判断这个互斥体是否已在系统中存在:
在 Main 函数中判断是否有实例已经运行,如果没有,则运行:
.NET Framework 从 1.1 起就提供了一个 Mutex (互斥体) 的类 (System.Threading)。CSDN 的帖子上也多推荐用它来做。但是有的代码让人很费解,很长。下面是我写的一个方法,代码不超过 15 行。下面的变量和方法定义都在 Program.cs 里。这个文件包含 Main 入口函数,是整个程序的入口。
定义一个静态互斥体:static Mutex InstanceMutex
定义一个静态判断方法。用来判断这个互斥体是否已在系统中存在:
static bool DoesAnInstanceRunning() {
try {
Mutex.OpenExisting("SPS");
}
catch (Exception) {
return false;
}
return true;
}
try {
Mutex.OpenExisting("SPS");
}
catch (Exception) {
return false;
}
return true;
}
在 Main 函数中判断是否有实例已经运行,如果没有,则运行:
[STAThread]
static void Main() {
if (DoesAnInstanceRunning()) return;
InstanceMutex = new Mutex(true, "SPS");
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Applicaion.Run(new Form1());
}
static void Main() {
if (DoesAnInstanceRunning()) return;
InstanceMutex = new Mutex(true, "SPS");
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Applicaion.Run(new Form1());
}