此代码不允许多个正在运行的应用程序实例但不起作用。有什么问题?
public Main()
{
InitializeComponent();
// Dont allow multiple instances
bool isNew = false;
Mutex mutex = new Mutex(true, "Application", out isNew);
if (!isNew)
{
RadMessageBox.Show(this, "Application is already running.", "Error",
MessageBoxButtons.OK, RadMessageIcon.Error);
Environment.Exit(0);
}
}
答案 0 :(得分:1)
你的Mutex超出了范围。这意味着当应用程序的第二个实例运行时,第一个实例不再具有互斥锁。所以第二个实例没有"看到"首先。我建议将此代码放在Program类中,而不是放在表单中。
static class Program
{
static void Main()
{
bool isNew = false;
using (var mutex = new Mutex(false, "MyApplicationName", out isNew))
{
if (isNew)
Run();
else
RadMessageBox.Show(this, "Application is already running.", "Error", MessageBoxButtons.OK, RadMessageIcon.Error);
}
}
static void Run()
{
// the rest of your program goes here
}
}