あなたは基本的に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);
}
あなたの現在のスレッドが何をすべきメソッド呼び出しからの回答を待っている間に? – sisve
これはプラグインマネージャーで使用されているので、メインスレッド(プラグインマネージャー)は他のプラグインからの要求を処理し、InvokeOnNewThreadメソッドによって他の新しいスレッドを生成します。 – user589195