Entwickler-Ecke

WinForms - Form in einem neuen Thread öffnen


vreden123 - Mi 11.05.11 23:39
Titel: Form in einem neuen Thread öffnen
Hallo,

ich lasse meine 2. Form (Form2) aus Form1 in einem neuen Thread öffnen, damit Form1 beim ladevorgang von Form2 nicht beeinträchtigt wird.

Jetzt habe ich nur das Problem das sich Form2 direkt wieder schließt, wenn der neue Thread, also das öffnen der 2. Form abgeschlossen ist.
Dies ist ja vom Prinzip her gesehen auch richtig, das sich der Thread beendet wenn er abgeschlossen ist.

Wie kann ich es am besten anstellen, das sich der neue Thread erst beendet, wenn die 2.Form geschlossen bzw. this.Hide(); gemacht wird?

Ich könnte auch mit
System.Threading.Thread.Sleep(zeitwert);
arbeiten aber das zögert das direkte schließen der 2. Form nur herraus.


jaenicke - Do 12.05.11 05:49

user profile iconvreden123 hat folgendes geschrieben Zum zitierten Posting springen:
ich lasse meine 2. Form (Form2) aus Form1 in einem neuen Thread öffnen, damit Form1 beim ladevorgang von Form2 nicht beeinträchtigt wird.
Wie meinst du das? Du kannst auf keine Oberfächenelemente aus einem Thread heraus zugreifen. Das muss immer im Kontext des Hauptthreads passieren.

Die Daten hinter einem Formular kannst du natürlich im Thread laden und dann die Ergebnisse aus dem Hauptthread heraus anzeigen.


vreden123 - Do 12.05.11 13:40

Also ich meine wenn ich in Form1 auf den Button klicke, öffnet sich Form2.
Das öffnen/berechnen von Form2 dauert relativ lange, deswegen, lasse ich es in einem neuen Thread öffnen.
Nur das Problem ist, wenn Form2 komplett berechnet/geöffnet ist, beendet sich der neue Thread und Form2 schließt sich direkt wieder.
Ich müsste das beenden des neuen Thread verhindern.


jaenicke - Do 12.05.11 13:55

user profile iconvreden123 hat folgendes geschrieben Zum zitierten Posting springen:
Das öffnen/berechnen von Form2 dauert relativ lange, deswegen, lasse ich es in einem neuen Thread öffnen.
Wie ich schon geschrieben habe:
Das geht sowieso nicht.

Trenne die Daten von der Darstellung. Die Daten kannst du ruhig im Thread berechnen und danach musst du dann die Ergebnisse an den Hauptthread liefern (delegates, ...) und im Kontext des Hauptthreads das zweite Fenster öffnen.

Du darfst niemals direkt aus dem Thread auf die visuelle Oberfläche zugreifen.