System.Reflection.MethodInfo.Invoke e filettature multiple (con tipo di ritorno)
-
24-10-2019 - |
Domanda
Sono stato a guardare attraverso le altre domande sul sito e ho trovato questo post.
overflow dello stack post originale
Ben Voigts risposta è molto utile e credo ce l'ho a lavorare nel mio sistema.
Il problema che ho è che in alcuni casi ho bisogno di un valore da restituire dalla chiamata di metodo.
I stava per lasciare solo un commento su questo post, ma il mio rappresentante non è abbastanza alta per commentare.
Speriamo che sia Ben vedranno questo post o qualcun altro sarà in grado di estendere la sua risposta a comprendere come restituire un valore.
Per favore fatemi sapere se c'è qualche altra informazione si richiedono.
Cordiali saluti
Ash
Soluzione
Che, fondamentalmente, sono due opzioni. O si chiama il MethodInfo.Invoke modo sincrono e attendere il risultato. O si imposta un metodo di callback per ottenere chiamato una volta che l'invocazione è completo. Estendendo l'esempio si è collegato a:
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();
}
Ho aggiunto un parametro aggiuntivo che prende un delegato che andranno chiamata quando l'invocazione è fatto. Quindi è possibile utilizzare in questo modo:
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);
}