System.Reflection.Methodinfo.Invoke y múltiples subprocesos (con tipo de retorno)
-
24-10-2019 - |
Pregunta
He estado revisando las otras preguntas en el sitio y he encontrado esta publicación.
publicación original de la pila
La respuesta de Ben Voigts es muy útil y creo que la tengo trabajando en mi sistema.
El problema que tengo es que en algunos casos necesitaré que se devuelva un valor de la invocación del método.
Iba a dejar un comentario en esa publicación, pero mi representante no es lo suficientemente alto como para dejar comentarios.
Esperemos que Ben vea esta publicación o alguien más podrá extender su respuesta para incluir cómo devolver un valor.
Avíseme si hay alguna otra información que necesite.
Saludos cordiales
Ceniza
Solución
Básicamente tienes dos opciones. O llame a MethodInfo.Invoke sincrónicamente y espere el resultado. O configura un método de devolución de llamada para que se llame una vez que se complete la invocación. Extendiendo desde el ejemplo al que se vinculó:
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();
}
Agregué un parámetro adicional que toma un delegado que se llamará cuando se realice la invocación. Entonces puedes usarlo de esta manera:
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);
}