【问题标题】:How do I keep the WebBrowser control from catching exceptions and displaying them as script errors?如何防止 WebBrowser 控件捕获异常并将它们显示为脚本错误?
【发布时间】:2013-07-04 02:17:11
【问题描述】:
我的 C# 应用程序和使用 ObjectForScripting 属性的嵌入式 System.Windows.Forms.WebBrowser 控件之间进行了一组相当复杂的交互。不幸的是,我在某个地方犯了一个导致异常的错误。但是除了消息之外我看不到任何信息,因为该控件似乎捕获了从 Javascript 调用的本机方法中发生的所有异常并将它们显示为脚本错误。
有什么方法可以禁用此行为,以便像往常一样抛出异常?
【问题讨论】:
标签:
c#
winforms
exception
webbrowser-control
【解决方案1】:
我最终没有找到一个通用的解决方案,但是这个对我来说已经足够了。
浏览器和我的应用程序之间的通信仅通过一种 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 事件。