我一直在查看网站上的其他问题,并找到了这篇文章。

堆栈溢出原始帖子

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);
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top