2017-02-28 81 views
4

試圖再次問我的問題 - 上次它搞砸了。C#winforms不會在特定情況下捕獲異常

這是我的示例代碼:

  1. 小的形式,即只包含按鈕,組合框:

    public partial class question : Form 
    { 
    public question() 
    { 
        InitializeComponent(); 
    } 
    
    private void button1_Click(object sender, EventArgs e) 
    { 
        comboBox1.DataSource = new List<string>() { "a", "b", "c" }; 
    } 
    
    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
        MessageBox.Show("In comboBox1_SelectedIndexChanged"); 
        throw new Exception(); 
    } 
    } 
    
  2. 項目的Program類調​​用question形式和處理異常:

    class Program 
    { 
    static void Main(string[] args) 
    { 
        try 
        { 
         Application.EnableVisualStyles(); 
         Application.SetCompatibleTextRenderingDefault(false); 
    
         // Add the event handler for handling UI thread exceptions to the event. 
         Application.ThreadException += new ThreadExceptionEventHandler(MyCommonExceptionHandlingMethod); 
    
         // Set the unhandled exception mode to force all Windows Forms errors to go through 
         // our handler. 
         Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); 
    
         // Add the event handler for handling non-UI thread exceptions to the event. 
         AppDomain.CurrentDomain.UnhandledException += 
          new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); 
    
         Application.Run(new question()); 
        } 
        catch (Exception ex) 
        { 
         Console.WriteLine(ex.Message + "3"); 
        } 
    } 
    private static void MyCommonExceptionHandlingMethod(object sender, ThreadExceptionEventArgs t) 
    { 
        Console.WriteLine(t.Exception.Message + "1"); 
    } 
    
    private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) 
    { 
        Console.WriteLine(((Exception)e.ExceptionObject).Message + "2"); 
    } 
    } 
    

現在,當點擊按鈕時,事件「SelectedIndexChanged」上升(並且出現消息框)但是該例外被忽略。只有當用戶手動選擇組合框中的另一個索引時,纔會處理異常。

問題是,如何處理這些異常呢?

+0

設我明白這一點。您的基於控制檯的應用程序和winForm是兩個獨立的應用程序,並且您想從基於控制檯的應用程序運行winFrom應用程序 - 是嗎? –

+0

@YawarMurtaza謝謝。不是兩個分開的應用程序。只是應用程序的主要部分是控制檯應用程序(實際上總是這樣)。沒關係。 – Yehezkel

+0

好的 - 我已經創建了你的代碼的確切副本。運行時永遠不會到達「Console.WriteLine(ex.Message +」3「);」聲明無論在winForm中做了什麼。必須與Application.Run()方法有關,它會在Main方法運行的同一線程上爲winForm應用程序創建一個新的消息循環。讓我看看在這種情況下是否可以找到異常情況。 –

回答

相關問題