0

ユーザーが複数のインスタンスを実行できるようにしたくない .net 3.5 / c# / wpf アプリがあります。だから私は app.xaml.cs で以下を使用します

protected override void OnStartup(StartupEventArgs e)
{
    const string mutexName = "Local\\MyApp.SingleInstance";
    try
    {
        // Create a new mutex object with a unique name
        _mutex = new Mutex(false, mutexName);
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message + "\n\n" + ex.StackTrace +
                    "\n\n" + "Application Exiting…", "Exception thrown");
        Current.Shutdown();
    }

    if (_mutex.WaitOne(0, false))
    {
        base.OnStartup(e);
    }
    else
    {
        MessageBox.Show("app is already open", "Error", MessageBoxButton.OK, MessageBoxImage.Information);
        Current.Shutdown();
    }
    //...show mainwindow or load app
}

私の問題は、一部のユーザーが次の例外を報告することです: 例外: ミューテックスが放棄されたため、待機が完了しました。タイプ: System.Threading.AbandonedMutexException

これをローカルで再現できないため、何が起こっているのかを把握するのは困難です。

追加しますか

finally
{
    _mutex.ReleaseMutex();
}

私のtry/catchの後、おそらく助けになりますか?

4

1 に答える 1

0

使用方法:

using (var mutex = new Mutex(false, mutexName))
{
    if (mutex.WaitOne(0, false))
    {
        base.OnStartup(e);
    }
    else
    {
        MessageBox.Show("app is already open", "Error", MessageBoxButton.OK, MessageBoxImage.Information);
        Current.Shutdown();
    }
}
于 2013-04-26T01:04:27.430 に答える