我的 C# 应用程序和使用该属性的嵌入式System.Windows.Forms.WebBrowser
控件之间进行了一组相当复杂的交互。ObjectForScripting
不幸的是,我在某个地方犯了一个导致异常的错误。但我看不到除消息之外的任何信息,因为该控件似乎捕获了从 Javascript 调用的本机方法中发生的所有异常,并将它们显示为脚本错误。
有什么方法可以禁用此行为,以便像往常一样抛出异常?
我的 C# 应用程序和使用该属性的嵌入式System.Windows.Forms.WebBrowser
控件之间进行了一组相当复杂的交互。ObjectForScripting
不幸的是,我在某个地方犯了一个导致异常的错误。但我看不到除消息之外的任何信息,因为该控件似乎捕获了从 Javascript 调用的本机方法中发生的所有异常,并将它们显示为脚本错误。
有什么方法可以禁用此行为,以便像往常一样抛出异常?
我最终没有找到一个通用的解决方案,但是这个对我来说已经足够好了。
浏览器和我的应用程序之间的通信仅通过一个 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
事件。