我正在尝试查看除了全局级别处理(Application.UnhandledException)之外是否可以在视图模型级别处理异常。目前,如果其中一个视图模型抛出未捕获的错误,则应用程序将硬崩溃。我想知道如何在模块级别捕获这个,发布一个事件,并让这个模块从它所占据的区域中删除,而不是取消整个应用程序。
有没有人实施过这样的事情?
应该避免这种类型的架构吗?
我正在尝试查看除了全局级别处理(Application.UnhandledException)之外是否可以在视图模型级别处理异常。目前,如果其中一个视图模型抛出未捕获的错误,则应用程序将硬崩溃。我想知道如何在模块级别捕获这个,发布一个事件,并让这个模块从它所占据的区域中删除,而不是取消整个应用程序。
有没有人实施过这样的事情?
应该避免这种类型的架构吗?
我在自己的工作中遇到了同样的问题。涵盖以下所有内容似乎对我们有用:
DispatcherUnhandledException += OnDispatcherUnhandledException;
TaskScheduler.UnobservedTaskException +=TaskScheduler_UnobservedTaskException; \\exceptions in tasks
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
此外,对于模块和视图模型级别的异常,我们尝试/捕获,然后通过EventAggregator
. 在我们的 shell 中,我们订阅此事件以显示/记录错误。由于外壳很可能包含所有区域,因此您应该能够从视图中删除/隐藏这些模块。但是,我会声明无法卸载模块。这可能不是最佳解决方案,我们仍在探索更好的方法来做到这一点。
壳:
EventAggregator.GetEvent<RaisedExceptionEvent>().Subscribe(RaisedException);
视图模型:
try
{
}
catch (Exception ex)
{
EventAggregator.GetEvent<RaisedExceptionEvent>().Publish(new ExceptionManager(ex,
ExceptionMessageType.
Default, true));
}