Verwenden Sie die ShowDialog(form) wo die form erstellt wird auf einem anderen thread?

Ich habe ein Formular, das ist wie ein dialog, um sicher zu sein, dass der dialog die richtige Elternteil die folgende Methode verwendet :

this.ShowDialog(myForm);

Das problem ist, dass diese(meine dialog-Formular) und myForm erstellt, die auf verschiedene threads und beim Aufruf von ShowDialog ein crossthread Ausnahme geworfen wird.

this.InvokeRequired = false
myForm.InvokeRequired = true

Wie umgehe ich diese? Muss ich sicherstellen, dass beide basieren auf dem selben UI-thread?

  • Was die thread-erstellen Sie das Formular auf? Was ist this?
  • dies ist der winform, die als ein dialog. Sein nicht bekannt ist, welcher thread die form und der dialog erstellt wird, könnte es sein, diffrent stets in der aktuellen Einrichtung. Ihr hängt alles davon ab, der controller, der den dialog erstellt, und Sie myform.
  • "Es ist nicht bekannt, welcher thread die form und der dialog erstellt wird, könnte es sein, diffrent stets in der aktuellen Einrichtung." Darin liegt dein problem.
  • diese.ShowDialog();??? Sind Sie auf der Einführung der form in sich selbst?
  • Es ist mein Verständnis, dass in Winforms-theres ist eine GUI-thread. Die form kann angezeigt werden, nur auf der GUI-thread, so wird es ein cross-thread-Aufruf, wenn Sie zeigen die form, denn es zeigt auf dem GUI-thread.
  • Heffernan > Also muss ich beim erstellen der dialog-Formular und myform auf dem gleichen thread, der UI-thread. Wie finde ich den UI-thread?
  • Alexander > Das ist richtig.
  • Es könnten mehrere UI-threads, soweit ich weiß. Wie finde ich die richtige?
  • Es ist der thread, der die main form wurde aus (hoffe ich!)
  • Nein, ich glaube, es ist eine UI-thread, Sie machen zu müssen, ob oder nicht Sie passieren eine übergeordnete form.
  • Könnten Sie eine neue Nachricht erstellen, Pumpe mit der Anwendung.Laufen(neue form), meinst du, dass diese messageppump auf dem selben UI-thread als Haupt-Anwendung(die auch verwendet, Anwendung.Laufen(neue ThisMainForm()) ? Wie bekomme ich den UI-thread?

InformationsquelleAutor Banshee | 2011-11-24
Schreibe einen Kommentar