c# - Prism 模块级异常处理

标签 c# mvvm exception prism

除了全局级别处理 (Application.UnhandledException),我正在尝试查看是否有可能在 View 模型级别处理异常。目前,如果其中一个 View 模型抛出 Uncaught Error ,应用程序将严重崩溃。我想知道如何在模块级别捕获它、发布一个事件,并将该模块从它占用的区域中删除,而不是关闭整个应用程序。

有没有人实现过这样的东西?
应该避免这种类型的架构吗?

最佳答案

我在自己的工作中遇到了同样的问题。涵盖以下所有内容似乎对我们有用:

DispatcherUnhandledException += OnDispatcherUnhandledException;

TaskScheduler.UnobservedTaskException +=TaskScheduler_UnobservedTaskException; \\exceptions in tasks

AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;

此外,对于模块和 View 模型级别的异常,我们尝试/捕获然后通过 EventAggregator 发布一个事件。在我们的 shell 中,我们订阅此事件以显示/记录错误。由于外壳很可能包含所有区域,因此您应该能够从 View 中删除/隐藏这些模块。但是我会声明模块无法卸载。这可能不是最佳解决方案,我们仍在探索更好的方法。

外壳:

EventAggregator.GetEvent<RaisedExceptionEvent>().Subscribe(RaisedException);

View 模型:

try
{
}
catch (Exception ex)
{
            EventAggregator.GetEvent<RaisedExceptionEvent>().Publish(new ExceptionManager(ex,
                                                                                          ExceptionMessageType.
                                                                                              Default, true));
}

关于c# - Prism 模块级异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13405326/

相关文章:

c# - Unity2D - 如何在 2D 游戏中围绕圆移动和旋转游戏对象?

function - Kendo Treeview 模板 : d. MyFunction 不是函数

wpf - 将 ViewModel 放在代码隐藏中是错误的吗?

java - 线程挂起() UnsupportedOperationException

c# - 为枚举分配(非)常量值

c# - Task.ContinueWith 和 .wait()。对象处置异常?

android - 使用 MVVM kotlin 进行 Firebase 身份验证

java - 用于抛出客户端特定异常的 JAX RS CXF 拦截器

c# - 在c#中抛出异常

c# - HtmlAgilityPack错误处理-捕获异常