Hi zusammen
Ich habe folgendes Problem.
Ich habe einen "Gui- Thread", da gibt es einen Button welcher eine Reihe von Tests auslösen soll. Diese Tests werden in einem separaten "Arbeitsthread" ausgeführt, damit das Gui nicht blockiert.
Damit der Gui- Thread nicht weiterläuft und mir die anderen Tests bereits startet habe ich ihn mit einer while versehen welche wartet bis im Arbeitsthread eine Variable gesetzt wird.
Nun will ich im Arbeitsthread eine MessageBox aufrufen -> diese sollte aber im Gui- Thread aufgerufen werden. deshalb verwende ich this.Invoke.
doch nun bleibt er hängen, ich vermute weil ich meinen Gui-Thread in einer while schlaufe habe.
Wie kann ich dieses Problem lösen? also wie kann ich verhindern dass mein Gui Thread weiter läuft und weiter tests auslöst ich aber trotzdem meine MessageBox aufrufen kann.
Ich kam schon auf die Idee die Testaufrufe ebenfalls in einen Thread zu verlagern. Ich persönlich finde das jedoch eine nicht sehr schöne Lösung. Habt ihr vielleicht andere ideen?
//GuiThread
void ButtonClick(object sender, EventArgs e)
{
bool mWaitforThread = false;
System.Threading.Thread newThread = new Thread(() => Function(ref mWaitforThread));
newThread.Start();
while(!mWaitforThread);
//naechster Test welcher erst nach beednigung des ersten aufgerufen werden darf.
}
delegate void Ausgabe(string x, string y);
void AusgabeGui(string x, string y)
{
//Ausgabe
}
void Function(ref bool pWaitforThread)
{
//do something
Ausgabe SetGui = new Ausgabe(AusgabeGui);
this.Invoke(SetGui,x,y);
pWaitforThread = true;
}
Vielen Dank für eure Hilfe
hallochg
Hallo,
Ich kam schon auf die Idee die Testaufrufe ebenfalls in einen Thread zu verlagern Doch, das wirst du so machen müssen, s. [FAQ] Warum blockiert mein GUI?.
Eine Erklärung. Dein GUI Thread läuft weiter. Er läuft in der Schleife und kommt nicht mehr raus. Das nennt man in diesem Fall blockieren, denn diese sinnfreie Schleife lässt ihm keine Gelegenheit mehr sich um den Rest der GUI zu kümmern.
Vielen Dank für die Antworten.
Dann werde ich dies so realisieren.
Grüsse hallochg