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

È stato utile?

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);
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top