Hallo,
durch ein Event rufe ich eine Invoke Methode auf, möchte nun, das der Code nicht ausgeführt wird bis ich den Rückgabewert der Methode habe.
Durch Threadpool, Backgroundworker klappte es bei mir nicht wirklich(lief entweder weiter im Code oder Exception wurde geworfen),
bin noch ziemlich neu , kann mir jemand hierbei weiterhelfen oder hat jemand vielleicht einen nützlichen Link?
Danke im Vorraus!
Hallo,
das Warten ist immer eine gefährlich und meist nicht sinnvolle Geschichte 😃
Wenn du eine Aufgabe hast die lange dauern kann dann ist es besser diese einfach zu starten und nachher über ein Event der GUI mitzuteilen wenn fertig ist.
Dabei musst du aber beachten dass du keine threadübergreifende Vorgänge machst.
Siehe dazu: [FAQ] Warum blockiert mein GUI? und [FAQ] Controls von Thread aktualisieren lassen (Control.Invoke/Dispatcher.Invoke)
Gruss
Michael
Hallo Honkey,
Durch Threadpool, Backgroundworker klappte es bei mir nicht wirklich(lief entweder weiter im Code oder Exception wurde geworfen),
Welche?
Hier sollten die Links von michlG weiterhelfen.
Ansonsten (zu deiner eigentlichen Frage:) wartet Invoke (im Gegensatz zu BeginInvoke) bis die Ausführung beendet wurde.
Danke für die Antworten!
Also im Silverlight habe ich momentan diesen Code
private void ComboBoxK_SelectionChanged(object sender, SelectionChangedEventArgs e)
{ //******************************************************************
IrgendDomainContext ctx = new IrgendDomainContext();
invOpr = ctx.GetAnzahl(ComboBoxK.SelectedItem.ToString(););
invOpr.Completed += new EventHandler(invOpr_Completed);
//*******************************************************************
Hier soll es nun weiter gehen, wenn invOpr den Wert hat
//*******************************************************************
}
Dem Thread (Controls von Thread aktualisieren lassen) zufolge sollte ich die Zeile hinzufügen:
ComboBoxK.Dispatcher.Invoke (new MethodInvoker (DoCheapGuiAccess));
Nur
-wird unter Dispather nur Begininvoke angezeigt
-MethodInvoker wird nicht angezeigt, Verweis kann ich ebenfalls nicht hinzufügen, da ich im Silverlight Projekt bin
-Mein DoCheapGuiAccess ist ein Event ( ComboboxK_selectionchanged)
Hallo,
das Problem stellt sich ja doch bissle anders da als von dir ursprünglich beschrieben. Du wartest ja nicht wirklich auf irgend nen Invoke, sondern darauf ob das Event auftritt. Sowas geht natürlich nicht, das widerspricht ja völlig dem Event Gedanken. Aber da gibts trotzdem kein Problem, du musst einfach in deiner invOpr_Completed Methode am Ende den Code aufrufen den du bei deinem Kommentar
Hier soll es nun weiter gehen, wenn invOpr den Wert hat aufrufen willst.
Baka wa shinanakya naoranai.
Mein XING Profil.