System.Reflection.methodinfo.invoke и несколько потоков (с возвращаемым типом)
-
24-10-2019 - |
Вопрос
Я просматривал другие вопросы на сайте и нашел этот пост.
Бен Войгтс Ответ очень полезен, и я считаю, что он работает в моей системе.
У меня проблема заключается в том, что в некоторых случаях мне понадобится значение, которое будет возвращено из вызова метода.
Я собирался просто оставить комментарий к этому посту, но мой представитель недостаточно высок, чтобы оставить комментарии.
Надеемся, что либо Бен увидит этот пост, либо кто -то еще сможет расширить свой ответ, чтобы включить, как вернуть ценность.
Пожалуйста, дайте мне знать, если есть какая -либо другая информация, которая вам нужна.
С уважением
Пепел
Решение
У вас в основном есть два варианта. Либо вы называете методическим синхронно и ждете результата. Или вы настроили метод обратного вызова, чтобы вызвать после завершения вызова. Простирается от примера, с которым вы связаны:
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);
}