System.Reflection.methodinfo.invoke和多个线程(带有返回类型)
-
24-10-2019 - |
题
我一直在查看网站上的其他问题,并找到了这篇文章。
Ben Voigts答案非常有用,我相信我可以在系统中起作用。
我遇到的问题是,在某些情况下,我需要从方法调用中返回值。
我本来只对那篇文章发表评论,但是我的代表不足以发表评论。
希望Ben会看到这篇文章,或者其他人将能够扩展其答案,包括如何返回价值。
如果您需要其他信息,请告诉我。
亲切的问候
灰
解决方案
您基本上有两个选择。您要么同步调用MethodInfo.invoke并等待结果。或者,您设置了一个回调方法,一旦调用完成,就会被调用。从您链接到的示例延伸到:
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);
}
不隶属于 StackOverflow