2014-03-26 93 views
1

您好,我在.net 4.0中遇到了一個奇怪的問題。我從我的主窗體線程中調用以下代碼,並且我在變量MainForm.NumberOFWindows(雖然它已初始化)上得到「未設置爲實例的對象引用」異常,但我找不到原因。對我來說真奇怪的是,這個異常沒有被try catch異常子句捕捉到。 有人可以請我的問題一些燈?爲什麼會發生異常,以及爲什麼它沒有被try catch子句捕獲?使用委託時「對象引用未設置爲實例」

try 
{ 
    MyThread = new Thread(delegate() 
    { 
     Notify.UserInput(this,ref MainForm.NumberOFWindows); 
    }); 
} 
catch (Exception ex) 
{ 
    MessageBox.Show(ex.Message); 
} 
+0

@MaxMommersteeg那是什麼來實現呢? 「MyThread」可能是一個屬性。 –

+0

try/catch不會捕獲它,因爲它沒有在該點運行。運行MyThread的代碼在哪裏? –

+0

要捕捉錯誤,您需要在代理內部放置一個try catch – Johan

回答

1

爲什麼它沒有被在try catch子句逮住?

因爲它在不同的線程中發生的與不同的堆棧比你的try/catch塊

爲什麼會出現異常,儘管MainForm.NumberOFWindows初始化?

只是猜測,也許是因爲你選擇了它在主線程初始化,然後摧毀它新的線程需要控制和試圖訪問它(線程創建需要一些時間)

+0

線程中的異常處理:http://stackoverflow.com/questions/1554181/exception-handling-in-threads – JustAndrei

+0

所以如果我正確理解你,我從委託獲得的異常實際上是在另一個線程上發生的,儘管我還沒有調用MyThread.Start()函數,是的? – mpc

+0

當你調用MyThread.Start()' –

0

爲什麼它在某種程度上前是否被try catch子句捕獲?

如果你想要這個,你必須把try catch塊到代表這樣

MyThread = new Thread(delegate() 
    { 
     try 
      { 
      Notify.UserInput(this,ref MainForm.NumberOFWindows); 
      } 
      catch (Exception ex) 
      { 
      MessageBox.Show(ex.Message); 
      } 
    }); 
相關問題