2013-07-04 47 views
2

我使用ObjectForScripting屬性在我的C#應用​​程序和嵌入的System.Windows.Forms.WebBrowser控件之間進行了一系列相當複雜的交互。不幸的是,我在某個地方犯了一個錯誤,導致了一個異常。但我看不到消息以外的任何信息,因爲該控件似乎捕獲從Javascript調用的本機方法中發生的所有異常,並將它們顯示爲腳本錯誤。如何讓WebBrowser控件捕捉異常並將它們顯示爲腳本錯誤?

有什麼辦法可以禁用這種行爲,所以異常會像通常那樣被拋出?

回答

0

我沒有得到一個通用的解決方案,但這個工作對我來說已經足夠好了。

瀏覽器和我的應用程序之間的通信只能通過一個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事件。