我在C#应用程序和使用System.Windows.Forms.WebBrowser
属性的嵌入式ObjectForScripting
控件之间进行了一系列相当复杂的交互。不幸的是,我在一个导致异常的地方犯了一个错误。但是我看不到除消息之外的任何信息,因为控件似乎捕获了从Javascript调用的本机方法中发生的所有异常,并将它们显示为脚本错误。
有没有办法禁用此行为,因此会抛出异常,因为它们通常会出现?
答案 0 :(得分:0)
我没有最终得到通用的解决方案,但这个对我来说效果很好。
浏览器和我的应用程序之间的通信只能通过一个Javascript方法完成。所以我只是在try / catch块中包装了该方法中的所有代码,并将异常抛在另一个线程上。
[ComVisible(true)]
public class JavascriptBridge {
public void Notify(string data) {
try {
// Process the data
} catch (Exception ex) {
System.Threading.ThreadPool.QueueUserWorkItem((state) => {
throw new Exception("An unhandled exception ocurred while servicing a Javascript method call.", ex);
});
}
}
}
这完全绕过浏览器控件的异常处理程序并保留原始异常的位置信息。但请注意,再次捕获异常的唯一方法是使用Application.ThreadException
事件。