保护WinForms中的子控件抛出的异常

时间:2012-05-31 09:50:13

标签: winforms exception-handling

我正在编写一个基于WinForms的IDE风格的应用程序。作为该应用程序的一部分,它加载了实现名为IFeature的接口的插件。功能由主IDE框架通过MEF加载,然后要求实例化Control的实例,然后将其添加到选项卡页面以形成插件的主要工作界面。到目前为止一切都很好。

我现在正在尝试保护IDE免受严重实现的插件的攻击,而且我对如何做到这一点完全没有好主意。例如,如果插件是一个抛出异常的按钮,则IDE框架代码根本不涉及该调用堆栈,因此我没有地方可以注入try-catch。我已经了解了AppDomain.CurrentDomain.UnhandledExceptionApplication.ThreadException事件,这些事件为以这种方式抛出的异常提供了顶级保护,但我希望能够通过某些上下文捕获它们,以便异常可以绑定到导致问题的IFeature实例。

我确实想过创建一个派生自Control的类 - 然后覆盖各种方法并实现try-catch - 但是

一个。看起来很笨拙。
湾不会防止控制反过来控制这种方法 C。会阻止使用任何非自定义控件(例如,Panel

我是否可以使用任何其他方法为我的框架提供更接近原因的保护,或者我是否仍然坚持处理上述非常广泛的事件。

由于

马特

1 个答案:

答案 0 :(得分:1)

总的来说,我不会为此付出过多的负担。

告诉插件开发人员,当你发现他们的控件滑动的异常时,你将删除对该控件的所有引用。

要做其他事情太难了,因为你必须设想控件可能做错的一切。

对于非UI插件,我会杀死appdomain。

删除所有引用可能不那么安全,这可能是为什么许多允许UI插件的程序不允许UI插件绘制UI,而是根据插件通过界面建议的内容绘制插件的UI。