2011-01-25 79 views
0

我一直在浏览网站上的其他问题,并且发现了这篇文章。System.Reflection.MethodInfo.Invoke和多个线程(带返回类型)

stack overflow original post

本·福格茨的答案是非常有用的,我相信我有它在我的系统工作。

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

我刚刚对该帖子发表评论,但我的代表不够高,不能发表评论。

希望无论Ben会看到这篇文章还是别人能够扩展他的答案,包括如何返回一个值。

如果您有任何其他需要的信息,请让我知道。

亲切的问候

+0

当前线程在等待方法调用的答案时应该做什么? – sisve 2011-01-25 16:00:33

回答

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