3

を使用してSystem.Windows.Forms.WebBrowser、ビューを Visual Studio スタート ページのように作成しています。ただし、コントロールはすべての例外を黙ってシンクすることでキャッチして処理しているようです! これは非常に残念な振る舞いであると言う必要はありません。

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例外のシンクを停止し、自然で期待される方法で転送するようにコントロールに指示する方法はありますか? または、ネイティブの境界を介して例外をスローするハックな方法はありますか?

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 に答える