如何防止WebBrowser控件捕获异常并将其显示为脚本错误?

时间:2013-07-04 02:17:11

标签: c# winforms exception webbrowser-control

我在C#应用程序和使用System.Windows.Forms.WebBrowser属性的嵌入式ObjectForScripting控件之间进行了一系列相当复杂的交互。不幸的是,我在一个导致异常的地方犯了一个错误。但是我看不到除消息之外的任何信息,因为控件似乎捕获了从Javascript调用的本机方法中发生的所有异常,并将它们显示为脚本错误。

有没有办法禁用此行为,因此会抛出异常,因为它们通常会出现?

1 个答案:

答案 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事件。