我正在使用反射来实例化其他程序集中的对象。这些程序集中的对象可以在整个过程中启动其他线程。此程序集的作者可能无法正确处理这些工作线程上的异常。
问题是,当它们返回未处理时,整个应用程序停止执行并触发AppDomain.CurrentDomain.UnhandledException
。
我试过简单地将我的方法调用程序包装在try...catch
中,但这似乎没有捕获异常(因为下一个生成的工作线程是实际的失败线程,所以有意义)
有没有办法处理这种情况而不是简单地强制开发人员正确处理所有异常?
这个想法与Windows服务的工作方式类似。仅仅因为单个应用程序失败,并不意味着Windows服务主机也会崩溃。
我在这里缺少什么?
答案 0 :(得分:1)
您真的应该强制要求在线程中正确处理异常,如果没有,请干净地关闭应用程序。
为了防止AppDomain关闭,您需要在自己的私有AppDomain中加载这些“组件”。这会导致他们拆除他们的AppDomain,但不会拆除整个应用程序。
这会产生其他后果(特别是将数据传入和传出对象),并且可能会极大地使应用程序的设计复杂化,因此我不会轻易采取这些措施。