2008-08-20 61 views
3

我使用System.Windows.Forms.WebBrowser來製作Visual Studio Start Page的視圖。但是,看起來控制系統正在捕捉和處理所有的異常情況,並通過默默地沉沒它們!沒有必要告訴這是一個非常不幸的行爲。防止WebBrowser控件吞噬異常

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控件停止沉沒異常,並將它們轉換爲自然和預期的方式?還是有一些奇怪的方式通過本地邊界拋出異常?

回答

0

我最好的選擇,爲什麼會發生是因爲有一個本地管理 - 本地邊界交叉。本地部分不會正確轉發託管的異常,並且沒有太多可以完成的事情。

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

1

我還沒有看到瀏覽器吃例外,除非你的意思是腳本錯誤。腳本錯誤可以通過browser.ScriptErrorsSuppressed屬性啓用。

如果你正在談論真正的異常,而不僅僅是腳本錯誤,你能告訴我們一些代碼來重現問題嗎?我們廣泛使用了瀏覽器,並沒有看到您描述的內容。

編輯的代碼示例是不存在的時候,我問了一個代碼示例