Benutzer mit den meisten Antworten
Thread verzögern bis Form geladen wurde?! Aber wie

Frage
-
Hallo zusammen,
ich hätte mal wieder eine kleine Frage.
Wie genau realisiere ich das Event Form2_Shown?
Zu meinem Problem in Stichpunkten:
- MainGUI (Form1) wird gestartet
- User hat die Möglichkeit etwas zu prüfen/ zu vergleichen mit Klick auf Button1
- Button1 öffnet Form2
- Form2 soll automatisch einen Thread ausführen
mt = new Thread(startT); mt.IsBackground = true; mt.Start(); mt.Join();
- Dieser Thread soll gestartet werden, wenn Form2 mit allen Komponenten gezeichnet wurde
Unteranderem habe ich zwei progressBars und verschiedene Labels die Informationen über den Fortschritt anzeigen sollen. mt startet die Funktion startT in denen zwei separate Threads gestartet werden (Datenbankabgleich).
Nun ist mein Problem, wenn ich den mt im Shown Event starte wird die Form dennoch nicht zu ende gezeichnet und man sieht nur so etwas:
Wie kann ich dieses Problem am Besten lösen?
Vielen Dank
Antworten
-
Hallo,
wenn das Shown-Event aufgerufen wird, ist die Form bereits fertig gerendert. Das Problem dürfte sein, dass du die Form mit dem Aufruf von Join weiterhin blockierst. Joint bewirkt, dass sich der 2. Thread ein wenig so verhält, als wäre er im 1. Thread.Lasse also den Aufruf von mt.Join weg und achte ggf. anders auf das Ende des Threads. Vielleicht ist ein BackgroundWorker aber auch besser geeignet.
Der Aufruf von Update() lässt die ungültigen Bereiche des Fensters neu zeichnen. Die Grafikfehler können trotzdem wieder auftreten und das Fenster verschieben oder minimieren kannst du auch nicht, solange mt noch arbeitet.
Tom Lambert - C# MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort vorgeschlagen Aleksander Chalabashiev Freitag, 21. November 2014 14:46
- Als Antwort markiert absoluterBeginner Freitag, 21. November 2014 15:34
Alle Antworten
-
Hallo,
wenn das Shown-Event aufgerufen wird, ist die Form bereits fertig gerendert. Das Problem dürfte sein, dass du die Form mit dem Aufruf von Join weiterhin blockierst. Joint bewirkt, dass sich der 2. Thread ein wenig so verhält, als wäre er im 1. Thread.Lasse also den Aufruf von mt.Join weg und achte ggf. anders auf das Ende des Threads. Vielleicht ist ein BackgroundWorker aber auch besser geeignet.
Der Aufruf von Update() lässt die ungültigen Bereiche des Fensters neu zeichnen. Die Grafikfehler können trotzdem wieder auftreten und das Fenster verschieben oder minimieren kannst du auch nicht, solange mt noch arbeitet.
Tom Lambert - C# MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort vorgeschlagen Aleksander Chalabashiev Freitag, 21. November 2014 14:46
- Als Antwort markiert absoluterBeginner Freitag, 21. November 2014 15:34