Question

Je suis à la recherche à travers les autres questions sur le site et nous avons trouvé ce poste.

débordement de pile message original

Ben Voigts réponse est très utile et je crois que je l'ai travailler dans mon système.

La question que j'ai est que, dans certains cas, je vais avoir besoin d'une valeur à renvoyer de l'appel de méthode.

J'allais simplement laisser un commentaire sur ce poste mais mon représentant ne est pas assez élevé pour laisser des commentaires.

Espérons que ce soit Ben voir ce billet ou quelqu'un d'autre sera en mesure d'étendre sa réponse à inclure comment retourner une valeur.

S'il vous plaît laissez-moi savoir s'il y a d'autres informations dont vous avez besoin.

Cordialement

Ash

Était-ce utile?

La solution

Vous avez deux options. Soit vous appelez le synchroniquement MethodInfo.Invoke et attendre le résultat. Ou vous configurez une méthode de rappel pour obtenir appelé une fois que l'appel est terminé. L'extension de l'exemple que vous avez lié à:

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();
}

J'ai ajouté un paramètre supplémentaire qui prend un délégué qui sera appelé lorsque l'appel est fait. Ensuite, vous pouvez l'utiliser de cette façon:

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);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top