2011-09-16 13 views
10

Primero de todo esto es la entrada de registro de errores en mi errorDispatcher lanza InvalidOperationException en Messagebox.Show en caso 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)

código de todos modos:

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 
      { 
       // 
      } 
     } 
    } 
}} 

Así que en el método messagebox.show . esto solo ocurre cuando el usuario cambia el modo de lectura al modo de edición en mi formulario. esto implica colapsar y mostrar algunas etiquetas y controles ui.

si el evento se desencadena por la entrada de usuario todo está bien. Lo que quiero saber: ¿Por qué el evento de cambio de texto se dispara cuando se oculta y muestra algunos controles? ¿Qué puedo hacer para evitar este error?

EDITAR: el código anterior está en un control wpf personalizado. colocados en un proyecto WinForms/forma

+0

hace el código de mensaje se ejecutan en el hilo de interfaz de usuario? – thumbmunkeys

+0

No estoy seguro, por lo que puedo decir, porque es un evento de un control de ui debería ser ?? ¿¿derecho?? – Daanvl

+0

¿Es posible que suministre la ventana del propietario en MessageBox.Show()? Tiene una firma sobrecargada que acepta al propietario de la ventana. –

Respuesta

21

ver este thread que describe el mismo problema que el suyo:

La excepción se hace con el propósito de evitar que los insectos reentrada causadas por rarezas como resultado de la alteración del árbol visual, mientras tal evento (que a su vez ha sido activado por la alteración visual del árbol) es disparo. Si realmente debe confirmar algo cuando el estado de cambia un elemento de la interfaz de usuario, demorar con Dispatcher.BeginInvoke es probablemente lo correcto.

para ejecutar código en el hilo de interfaz de usuario, haga lo siguiente:

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

No sé mucho sobre lambda pero esto me da Error No puedo convertir la expresión lambda para escribir 'System.Delegate' porque no es un tipo de delegado – Daanvl

+0

He editado la respuesta – thumbmunkeys

+0

Eso se crea ahora, pero da NullReferenceException en la primera línea. Estoy empezando a sospechar que el despachador no está vivo en ese punto? – Daanvl

Cuestiones relacionadas