2011-01-25 10 views
0

私はこのサイトの他の質問を見てきましたが、この記事を見つけました。System.Reflection.MethodInfo.Invokeと複数のスレッド(戻り値付き)

stack overflow original post

ベンVoigtsの答えは非常に有用であり、私はそれが私のシステムでの作業持っていると信じています。

私が持っている問題は、場合によってはメソッド呼び出しから返される値が必要になることです。

私はちょうどその投稿にコメントを残そうとしていましたが、私の担当者はコメントを残すほどには高くありません。

ベンはこの投稿を見るか、他の人が値を返す方法を含むように答えを広げることができればうれしいです。

他に必要な情報がある場合は教えてください。

種類よろしく

アッシュ

+0

あなたの現在のスレッドが何をすべきメソッド呼び出しからの回答を待っている間に? – sisve

+0

これはプラグインマネージャーで使用されているので、メインスレッド(プラグインマネージャー)は他のプラグインからの要求を処理し、InvokeOnNewThreadメソッドによって他の新しいスレッドを生成します。 – user589195

答えて

1

あなたは基本的に2つのオプションがあります。 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); 
} 
関連する問題