3

我正在使用System.Windows.Forms.WebBrowser, 来创建一个视图 a-la Visual Studio Start Page。但是,控件似乎正在通过静默下沉来捕获和处理所有异常!不用说这是一个非常不幸的行为。

void webBrowserNavigating(object sender, WebBrowserNavigatingEventArgs e)
{
    // WebBrowser.Navigating event handler
    throw new Exception("OMG!");
}

上面的代码将取消导航并吞下异常。

void webBrowserNavigating(object sender, WebBrowserNavigatingEventArgs e)
{
    // WebBrowser.Navigating event handler
    try
    {
        e.Cancel = true;
        if (actions.ContainsKey(e.Url.ToString()))
        {
            actions[e.Url.ToString()].Invoke(e.Url, webBrowser.Document);
        }
    }
    catch (Exception exception)
    {
        MessageBox.Show(exception.ToString());
    }
}

所以,我所做的(上面)是捕获所有异常并弹出一个框,这比静默失败要好,但显然仍远非理想。我希望它通过正常的应用程序故障路径重定向异常,以便它最终变得未处理,或者由应用程序从根目录处理。

有没有办法告诉WebBrowser控件停止接收异常并以自然和预期的方式转发它们?还是有一些 hacky 方法可以通过本地边界抛出异常?

4

3 回答 3

1

我没有看到浏览器吃异常,除非你的意思是脚本错误。脚本错误可以通过该browser.ScriptErrorsSuppressed属性启用。

如果您谈论的是真正的异常,而不仅仅是脚本错误,您能否向我们展示一些重现问题的代码?我们已经广泛使用了浏览器,还没有看到您所描述的内容。

当我要求提供代码示例时,编辑代码示例不存在

于 2008-08-20T14:49:30.340 回答
0

我最好的选择是因为有一个本地管理的本地边界要跨越。本机部分没有正确转发托管异常,并且没有什么可以做的。

我仍然希望有一个更好的答案。

于 2009-09-29T14:47:38.233 回答
0

在这里聚会晚了 11 年,但以下解决方案对我有用。

webBrowserNavigating,替换MessageBox.Show(exception.ToString());Dispatcher.BeginInvoke(() => { throw exception; });

一旦webBrowserNavigating方法完成并且控制返回到 Windows 事件循环,异常就会被抛出并由正常机制处理。

于 2020-07-23T15:34:06.247 回答