ユーザーが複数のインスタンスを実行できるようにしたくない .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の後、おそらく助けになりますか?