사용자가 여러 인스턴스를 실행할 수 없도록하려는 .net 3.5/C#/wpf 응용 프로그램이 있습니다. 때문에 버려진 뮤텍스에 완료 대기 : 예외 : 그래서단일 인스턴스 응용 프로그램에서 AbandonedMutexException
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
}
내 문제는 내 사용자 중 일부는이 예외를보고 있다는 것입니다 내 App.xaml.cs를에 다음을 사용합니다. 형식 : System.Threading.AbandonedMutexException
이 항목을 로컬에서 재현 할 수 없어 무슨 일이 일어나는지 파악하기가 어렵습니다.
겠습니까 내 시도/캐치가 가능하게 도와 후
finally
{
_mutex.ReleaseMutex();
}
을 추가?
. http://stackoverflow.com/q/635640/56778 (특히 질문의 두 번째 코드 샘플)을 참조하십시오. –
감사합니다. 매우 유용합니다. 그것은 존의 대답을 설명하는 데 도움이됩니다. – danSiebes
또한, 'ReleaseMutex'는 앱 종료시에만 호출되어야합니다. – jnm2