我的 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/