C# 捕获插件UserControl引发的异常

C# 捕获插件UserControl引发的异常,c#,winforms,exception,plugins,user-controls,C#,Winforms,Exception,Plugins,User Controls,我正在编写一个WinForms应用程序,它以插件(想想小部件)的形式接受动态用户界面控件。为此,每个插件的主函数返回一个UserControl,然后将其添加到主窗体中 由于我的应用程序无法直接控制它们,我希望以异常方式“沙箱”插件,这样,如果其中一个UserControls抛出错误,我就可以捕获它并卸载罪魁祸首。明显的问题是UserControls是事件驱动的,可以在一百万个不同的地方抛出异常,所以我没有一件事可以包装在try/catch块中 如何捕获dynamic UserControls引发

我正在编写一个WinForms应用程序,它以插件(想想小部件)的形式接受动态用户界面控件。为此,每个插件的主函数返回一个UserControl,然后将其添加到主窗体中

由于我的应用程序无法直接控制它们,我希望以异常方式“沙箱”插件,这样,如果其中一个UserControls抛出错误,我就可以捕获它并卸载罪魁祸首。明显的问题是UserControls是事件驱动的,可以在一百万个不同的地方抛出异常,所以我没有一件事可以包装在try/catch块中


如何捕获dynamic UserControls引发的异常,或者对于这样的模块化应用程序,什么是更好的设计?

您可以使用全局异常处理(如自定义HTTPModule),然后确定异常是由哪个插件引发的

查看此链接,可能有用


只需调用插件实现并在每次调用周围添加尝试捕获逻辑,即可将UserControl封装在实现插件接口的对象中。

我想我忽略了一个重要的细节:这是一个WinForms应用程序,而不是ASP(现在编辑)。在这两种情况下,全局异常处理的想法可能是一种出路,因此我正在研究一些AOP替代方案。谢谢。我不太明白你的意思。插件接口只有一个函数:GetUserControl()。之后,UserControl被添加到表单中,并由UI事件驱动。。。UserControl有点复杂。我不知道它是否适用于VisualConstrals,但您是否可以在另一个AppDomain中加载您的用户控件并注册到event AppDomain.UnhandledException.A-ha,现在您可以开始讲话了。不幸的是,似乎不可能使用来自另一个AppDomain的用户控件,但通过谷歌搜索AppDomain分离,我在.NET插件上找到了一些我以前从未见过的页面。谢谢