Frage

Ich habe die anderen Fragen auf der Website durchgesehen und diesen Beitrag gefunden.

Stack Overflow Original Post

Die Antwort von Ben Voigts ist sehr nützlich und ich glaube, ich habe es in meinem System funktionieren.

Das Problem, das ich habe, ist, dass ich in einigen Fällen einen Wert benötige, um aus dem Methodenaufruf zurückgegeben zu werden.

Ich wollte nur einen Kommentar zu diesem Beitrag hinterlassen, aber mein Vertreter ist nicht hoch genug, um Kommentare zu hinterlassen.

Hoffentlich wird Ben diesen Beitrag sehen oder jemand anderes kann seine Antwort so erweitern, wie man einen Wert zurückgibt.

Bitte lassen Sie mich wissen, ob Sie andere Informationen benötigen.

Mit freundlichen Grüße

Asche

War es hilfreich?

Lösung

Sie haben im Grunde zwei Optionen. Entweder nennen Sie die methodinfo.invoke synchron und warten auf das Ergebnis. Oder Sie richten eine Rückrufmethode ein, um aufgerufen zu werden, sobald der Aufruf abgeschlossen ist. Erweitern Sie sich von dem Beispiel, mit dem Sie verlinkt sind:

public void InvokeOnNewThread(MethodInfo mi, object target, Action<object> callback, params object[] parameters)
{
     ThreadStart threadMain = delegate () 
        { 
            var res = mi.Invoke(target, parameters); 
            if(callback != null)
                callback(res);
        };
     new System.Threading.Thread(threadMain).Start();
}

Ich habe einen zusätzlichen Parameter hinzugefügt, der einen Delegierten erfordert, der aufgerufen wird, wenn der Aufruf ausgeführt wird. Dann können Sie es so verwenden:

void Main()
{
    var test = new Test();
    var mi = test.GetType().GetMethod("Hello");
    InvokeOnNewThread(mi, test, GetResult);


    Thread.Sleep(1000);
}

public void GetResult(object obj) 
{
    Console.WriteLine(obj);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top