Laden...

Warten auf Invoke Rückgabewert

Erstellt von Honkey vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.885 Views
H
Honkey Themenstarter:in
15 Beiträge seit 2010
vor 13 Jahren
Warten auf Invoke Rückgabewert

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!

3.430 Beiträge seit 2007
vor 13 Jahren

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

5.742 Beiträge seit 2007
vor 13 Jahren

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.

H
Honkey Themenstarter:in
15 Beiträge seit 2010
vor 13 Jahren

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)

6.862 Beiträge seit 2003
vor 13 Jahren

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.

H
Honkey Themenstarter:in
15 Beiträge seit 2010
vor 13 Jahren

achja^^, ich Depp, hätte selber draufkommen müssen,
Danke!