가벼운 WPF MVVM 프레임 워크를 개발 중이며 처리되지 않은 예외를 잡아 내고 이상적으로 복구 할 수 있기를 원합니다.프레임 워크 수준의 WPF 예외 캐치
나는 다음과 같은 상황이 발생,이 일을하지 않는 순간을 위해 모든 좋은 인수를 무시 : 나는 App.xaml.cs를의 OnStartup 메서드 내에서 AppDomain.CurrentDomain.UnhandledException 핸들러를 등록하면
을, 다음과 같이 ...
App.xaml.cs를 예상대로
protected override void OnStartup(StartupEventArgs e)
{
AppDomain.CurrentDomain.UnhandledException += new
UnhandledExceptionEventHandler(this.AppDomainUnhandledExceptionHandler);
base.OnStartup(e);
}
void AppDomainUnhandledExceptionHandler(object sender, UnhandledExceptionEventArgs ea)
{
Exception e = (Exception)ea.ExceptionObject;
// log exception
}
다음 내 VM의 중 하나에 예외를 발생, 핸들러가 호출됩니다.
이 방법을 사용하여 복구 할 수있는 방법이 없다는 것을 제외하면 지금까지는 예외를 기록한 다음 CLR이 앱을 종료하도록 할 수 있습니다.
실제로 원하는 것은 복구하고 메인 프레임 워크 VM에 제어권을 반환하는 것입니다. (다시이 일에 반대하는 동기를 제쳐두고).
그래서, 약간의 독서를하고, 나는 코드가 지금과 같이 보입니다 있도록 문제가
protected override void OnStartup(StartupEventArgs e)
{
AppDomain.CurrentDomain.UnhandledException +=
new UnhandledExceptionEventHandler(this.AppDomainUnhandledExceptionHandler);
this.DispatcherUnhandledException +=
new DispatcherUnhandledExceptionEventHandler(DispatcherUnhandledExceptionHandler);
base.OnStartup(e);
}
void AppDomainUnhandledExceptionHandler(object sender, UnhandledExceptionEventArgs ea)
{
Exception e = (Exception)ea.ExceptionObject;
// log exception
}
void DispatcherUnhandledExceptionHandler(object sender, DispatcherUnhandledExceptionEventArgs args)
{
args.Handled = true;
// implement recovery
}
..., 같은 장소에 AppDomain.CurrentDomain.UnhandledException에 대한 이벤트 핸들러를 등록하기로 결정 일단 this.DispatcherUnhandledException에 대한 핸들러를 등록하면 이벤트 핸들러가 호출되지 않습니다. 그래서 DispatcherUnhandledExceptionHandler를 등록하면 어떻게 든 AppDomain.CurrentDomain.UnhandledException에 대한 핸들러가 비활성화됩니다.
누구든지 처리되지 않은 VM 예외를 포착하고 복구하는 방법이 있습니까?
프레임 워크에서 스레딩을 명시 적으로 사용하지 않을 수도 있습니다.
감사합니다 Isak, 나는 내가 생성 할 가능성이있는 모든 예외를 잡는 것이 중요하다는 것을 아는 것이 중요합니다. –