c# - 如何防止 WebBrowser 控件捕获异常并将它们显示为脚本错误?

标签 c# winforms exception webbrowser-control

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

有什么方法可以禁用此行为,以便像往常一样抛出异常?

最佳答案

我最终没有得到一个通用的解决方案,但这个对我来说已经足够好了。

浏览器和我的应用程序之间的通信仅通过一个 Javascript 方法完成。所以我只是将该方法中的所有代码包装在一个 try/catch block 中,并将异常抛给另一个线程。

[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 事件。

关于c# - 如何防止 WebBrowser 控件捕获异常并将它们显示为脚本错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17460915/

相关文章:

c# - 如何在线程中运行方法并在线程退出时调用方法

.net - 可靠地更新 winforms 应用程序中的 UI 线程

exception - 这个 Perl 6 CATCH block 是否应该能够更改词法范围内的变量?

ios - Mac OS X 上的 CGContextShowText 异常。iOS 上正常

c# - 仅在 .Net 中证书身份验证失败并出现 SSL 错误

c# - Tesseract OCR - 如何训练这样的图像

c# - SSRS 报告中令人讨厌的 NULL 复选框

c# - 将 C# 应用程序日志发送到 Linux Syslog 服务器

c# - 如何验证集合是否包含所有唯一对象

C# SQL 连接字符串返回错误