多个应用程序实例但只运行一个

时间:2013-12-07 14:15:10

标签: c# mutex

我有一个非托管应用程序,它在运行时打开我的托管应用程序。 - 每次执行非托管应用程序时,它都会打开我的应用程序的新实例。

我必须以某种方式做这种情况:

- 第一次执行非托管应用程序时,我的托管应用程序应运行正常,但如果用户再次尝试打开非托管应用程序,那些托管实例应处于“待机”模式,如果第一次托管当前正在运行的应用程序已关闭,其中一个备用实例应该“恢复”。

到目前为止,我应该使用互斥锁:

   public Form1()
    {
        InitializeComponent();
        if (!IsSingleInstance())
        {

            this.Close();
            return;
        }
    }
    private static Mutex _mutex;
    private static bool IsSingleInstance()
    {
        _mutex = new Mutex(false, "MyApp");

        GC.KeepAlive(_mutex);

        try
        {
            return _mutex.WaitOne(0, false);
        }
        catch (AbandonedMutexException)
        {

            _mutex.ReleaseMutex();
            return _mutex.WaitOne(0, false);
        }
    }
    protected override void OnClosing(CancelEventArgs e)
    {
        if (_mutex != null)
        {
            _mutex.ReleaseMutex();
        }
    }

但是当然,代码只会检查另一个是否正在运行,如果它正在运行......那么它将关闭它。

我该怎么办?

谢谢,

1 个答案:

答案 0 :(得分:2)

我宁愿把锁放在Program.cs中的Main。

static void Main()
{
    Mutex mutex = new Mutex(false, "MyApp");
    if (mutex.WaitOne())
    {
        try
        {
            Application.Run(new Form1());
        }
        finally
        {
            mutex.ReleaseMutex();
        }
    }
}