2011-09-16 33 views
10
這一切

首先是我的錯誤錯誤日誌條目調度拋出InvalidOperationException異常的Messagebox.Show在TextChanged事件

crash program @ 15-9-2011 15:01:30error:System.InvalidOperationException: Dispatcher processing has been suspended, but messages are still being processed. at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)

反正代碼:

private void TB_postcode_cijfers_TextChanged(object sender, TextChangedEventArgs e){ 
if (TB_postcode_cijfers.Text != string.Empty || TB_postcode_cijfers.Text.Length > 0) 
{ 
    LBL_postcode.Content = Postcode_cijfers + Postcode_letters; 
    if (TB_postcode_cijfers.Text.Length == 4 && TB_postcode_letters.Text.Length == 2) 
    { 
     if (!ZoekOpPostcode(Injectioncheck(TB_postcode_cijfers.Text + TB_postcode_letters.Text))) 
     { 
      //MessageBox.Show("Geen resultaat gevonden, " + errortext); 
      if (MessageBox.Show("Geen resultaat gevonden, " + errortext + ".\n Wilt u overschakelen naar handmatig? ", "Handmatig?", MessageBoxButton.YesNo) == MessageBoxResult.Yes) 
      { 
       RB_handmatig.IsChecked = true; 
      } 
      else 
      { 
       // 
      } 
     } 
    } 
}} 

所以在messagebox.show方法。 只有當用戶將閱讀模式切換到我的表單上的編輯模式時纔會發生這種情況。 這涉及摺疊顯示一些標籤和UI控件。

如果事件從用戶輸入引發一切都很好。 我想知道什麼: 爲什麼在隱藏和顯示一些控件時textchanged事件觸發。 我能做些什麼來防止這個錯誤?

編輯: 上面的代碼是在一個自定義的WPF控制。放置在一個WinForms項目/形式

+0

確實在UI線程上的消息框代碼運行? – thumbmunkeys

+0

據我所知,不確定,因爲它是來自UI控制的事件,它應該是??對?? – Daanvl

+0

是否可以在MessageBox.Show()中提供所有者窗口?它有一個接受窗口所有者的重載簽名。 –

回答

21

看到這個thread它描述了同樣的問題,因爲你:

唯一的例外是故意的,以防止因 古怪從改變可視樹造成重入錯誤,而這種事件 (它本身已被視覺樹改變觸發)是 發射。如果你確實需要確認一些當UI元素變化的狀態 時,推遲Dispatcher.BeginInvoke大概是 是正確的做法。

運行在UI線程代碼執行以下操作:

Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action)(() => 
    { 

     if (MessageBox.Show("Geen resultaat gevonden, " + errortext + ".\n Wilt u overschakelen naar handmatig? ", "Handmatig?", MessageBoxButton.YesNo) == MessageBoxResult.Yes) 
     { 
      RB_handmatig.IsChecked = true; 
     } 
     else 
     { 
      // 
     } 
    })); 
+0

不太瞭解lambda的,但這給了我錯誤無法將lambda表達式轉換爲鍵入'System.Delegate',因爲它不是委託類型 – Daanvl

+0

我編輯了答案 – thumbmunkeys

+0

現在構建,但在第一行提供NullReferenceException。我開始懷疑調度員在那個時候還沒有活着? – Daanvl

相關問題