0

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

堆栈溢出原帖

Ben Voigts 的回答非常有用,我相信我可以在我的系统中使用它。

我遇到的问题是,在某些情况下,我需要从方法调用中返回一个值。

我本来打算对该帖子发表评论,但我的代表还不够高,无法发表评论。

希望 Ben 会看到这篇文章,或者其他人能够扩展他的答案以包括如何返回值。

如果您需要任何其他信息,请告诉我。

亲切的问候

4

1 回答 1

1

你基本上有两个选择。您可以同步调用 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);
}
于 2011-01-25T16:11:36.813 回答