System.Reflection.methodinfo.invoke и несколько потоков (с возвращаемым типом)

StackOverflow https://stackoverflow.com/questions/4795504

Вопрос

Я просматривал другие вопросы на сайте и нашел этот пост.

Оригинальный пост стека

Бен Войгтс Ответ очень полезен, и я считаю, что он работает в моей системе.

У меня проблема заключается в том, что в некоторых случаях мне понадобится значение, которое будет возвращено из вызова метода.

Я собирался просто оставить комментарий к этому посту, но мой представитель недостаточно высок, чтобы оставить комментарии.

Надеемся, что либо Бен увидит этот пост, либо кто -то еще сможет расширить свой ответ, чтобы включить, как вернуть ценность.

Пожалуйста, дайте мне знать, если есть какая -либо другая информация, которая вам нужна.

С уважением

Пепел

Это было полезно?

Решение

У вас в основном есть два варианта. Либо вы называете методическим синхронно и ждете результата. Или вы настроили метод обратного вызова, чтобы вызвать после завершения вызова. Простирается от примера, с которым вы связаны:

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

Я добавил дополнительный параметр, который принимает делегат, который будет вызван, когда вызов будет сделан. Тогда вы можете использовать его таким образом:

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);
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top