在 CSDN 上以前看到过好几篇说如何让程序只运行一个实例。虽然方法有很多,但是,都很麻烦。
.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;
}

在 Main 函数中判断是否有实例已经运行,如果没有,则运行:
[STAThread]
static void Main() {
    
if (DoesAnInstanceRunning()) return;
    InstanceMutex 
= new Mutex(true"SPS");

    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(
false);
    Applicaion.Run(
new Form1());
}

我用这个方法还没有出现什么问题,如果有问题请留言。