2011-01-25 73 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); 
}