如何判断C# WinForm程序是否已经在运行,且只允许运行一个实例是一个比较常见的问题,可以通过以下几个步骤来解决:
1.通过进程判断是否已经存在实例
可以通过进程名或进程ID来判断是否已经存在了实例。以下是代码示例:
using System.Diagnostics;
bool isRunning = false;
string currentProcessName = Process.GetCurrentProcess().ProcessName;
Process[] allProcesses = Process.GetProcesses();
foreach (Process process in allProcesses)
{
if (process.ProcessName == currentProcessName)
{
if (process.Id != Process.GetCurrentProcess().Id)
{
isRunning = true;
break;
}
}
}
if (isRunning)
{
MessageBox.Show("程序已经在运行中!");
Application.Exit();
}
上面的代码通过获取本地正在运行的所有进程,判断是否有当前进程名相同的进程,如果存在,则说明已经有一个实例在运行中。
2.通过Mutex实现同步访问控制
另外一种方式是使用Mutex
类来实现同步访问控制。以下是代码示例:
using System.Threading;
bool isRunning;
Mutex mutex = new Mutex(true, "MyMutex", out isRunning);
if (!isRunning)
{
MessageBox.Show("程序已经在运行中!");
mutex.ReleaseMutex();
Application.Exit();
}
上面的代码首先声明一个名为MyMutex
的互斥量,如果不存在这个互斥量,则创建一个并将其所有权初始归属为调用线程。如果已经存在了这个互斥量,那么Mutex
类构造函数的返回值为false
,此时将isRunning
设置为false
,表示程序已经运行中,然后释放这个互斥量,退出应用程序。
以上两种方法可以在程序中任选其一来判断并控制程序的运行实例,建议使用第一种方法进行判断。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# WinForm 判断程序是否已经在运行,且只允许运行一个实例,附源码 - Python技术站