我正在开发一个可通过插件扩展的应用程序。当需要插件实例时,我使用Activator.CreateInstance创建它。
在下面的代码中,pluginInst是使用Activator.CreateInstance创建的测试插件的实例,而testException()是一个插件函数,现在只是抛出异常。
Try
pluginInst.testException()
Catch ex As Exception
Console.WriteLine("plugin exception generated")
End Try
消息永远不会出现在visual studio的输出窗口中,如果我在catch中放置一个断点,它就永远不会出现。插件实例崩溃,但主应用程序继续正常运行。我看到的唯一一件事是视觉工作室输出窗口上的这条消息
Eccezione generata:testPlugin.dll中的'System.Exception'
我如何在主应用程序中处理这样的插件异常?我做错了什么?
答案 0 :(得分:0)
我已经解决了我的问题。据报道here
SystemEvents类在错误的线程上触发事件。这是由程序中的初始化问题引起的。典型的触发器不是在主线程上创建第一个窗口,这会混淆SystemEvents。它试图再次在同一个线程上触发一个事件,但它不再存在了。
在我的情况下,异常是从主应用程序表单的表单加载事件中调用的插件初始化生成的。在这个阶段,未处理的异常的正确线程似乎尚未创建,因此异常无处可去。在这种情况下,您可以看到,如果您关闭应用程序它仍然在运行,在我的情况下,fpushmessageloop类型的挂起线程(产生异常的那个)阻止了应用程序的关闭。
在我的情况下,将插件inizialization移动到应用程序主窗体的显示事件足以解决问题。