【问题标题】:Avoid exceptions from module in the application避免应用程序中的模块异常
【发布时间】:2011-08-31 21:59:36
【问题描述】:

我正在开发一个包含其他团队开发的模块的应用程序,并且我正在使用 MEF 托管它。 问题是当托管模块出现异常时,它会崩溃我的应用程序。

显而易见的解决方案是托管模块的开发团队将捕获他们所有的异常,但它没有发生,所以我必须确保自己。

我的想法:

1) 创建 2 个独立的 GUI 线程。有可能吗?

2) 将托管模块作为单独的 .exe 文件运行,但以某种方式将其托管在我的应用程序中。

我们将不胜感激。

【问题讨论】:

    标签: c# .net wpf design-patterns architecture


    【解决方案1】:

    首先你应该实现Application.DispatcherUnhandledException事件,更多细节请点击here

    完成此操作后,您应该与其他团队讨论以提高他们模块的稳健性。

    编辑:

    或者你可以关注这个approach。但我会尝试提高鲁棒性。

    【讨论】:

    • 谢谢,但 DispatcherUnhandledException 只处理 Gui 线程中的异常,而不是后台线程中的异常。 (这对大多数例外都有好处,但不是对所有例外)
    • 那么请遵循我的第二条建议。处理在另一个模块中启动的线程异常不应该是您的任务。如果你继续解决这些问题,你可能会在几个月内面临一些严重的问题。治标不治本,排除原因!
    【解决方案2】:

    我认为最好的方法是设置一些测试来验证您使用的来自其他团队的模块是否适合您的目的。

    除了这种明显但耗时的方法之外,您还可以将事件处理程序附加到 Application.DispatcherUnhandledException 并优雅地处理来自导入模块的异常。您应该能够在事件 args 的 Exception.Source 属性中找到异常的来源。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-13
      • 2020-03-06
      • 1970-01-01
      • 2010-09-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多