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

¿Fue útil?

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);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top