2017-03-04 5 views
0

Ich muss Fenster mit Spinner anzeigen, während der Verarbeitung einer Aktion. Dieses Fenster sollte Modell sein, so dass ich bin mit Showdialog() -Methode:Zeige modalen Dialog in parallelen Thread

void ShowDlg() { 
     Thread WindowThread = new Thread(() => 
    { 
     SpinnerWindow spinnerWindow = new SpinnerWindow(); 
     spinnerWindow.ShowDialog(); 
     System.Windows.Threading.Dispatcher.Run(); 
    }); 
     WindowThread.SetApartmentState(ApartmentState.STA); 
     WindowThread.Start(); 
} 

Dann, nach einigem Prozess gemacht wird, ich versuche, dieses modale Fenster zu schließen:

   WindowThread.Interrupt(); 
      if (!WindowThread.Join(2000)) 
      { 
       WindowThread.Abort(); 
      } 

und alles funktioniert gut , bis ich versuche, ShowDlg() das zweite Mal aufzurufen. Ich bekomme die nächste Ausnahme:

Der aufrufende Thread kann nicht auf dieses Objekt zugreifen, da ein anderer Thread es besitzt.

Was mache ich falsch, vielleicht inkorrekter Abschluss des erstellten Threads?

Antwort

2

Sie rufen wahrscheinlich die ShowDialog aus einem anderen Thread erneut an. Wenn dies der Fall ist, sollten Sie Ihr Hauptformular wie folgt aufrufen:

mainForm.Invoke(spinnerWindow.ShowDialog()); 
Verwandte Themen