不允许多个应用程序实例

时间:2014-03-21 18:52:38

标签: c# mutex

此代码不允许多个正在运行的应用程序实例但不起作用。有什么问题?

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);
    }
}

1 个答案:

答案 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
    }
}