System.Reflection.Methodinfo.Invokeおよび複数のスレッド(戻りタイプ付き)
-
24-10-2019 - |
質問
私はサイトの他の質問を調べてきましたが、この投稿を見つけました。
Ben Voigtsの答えは非常に便利であり、私はそれが私のシステムで働いていると信じています。
私が抱えている問題は、場合によっては、メソッドの呼び出しから返される値を返す必要があることです。
私はその投稿にコメントを残すつもりでしたが、私の担当者はコメントを残すのに十分高くありません。
うまくいけば、ベンがこの投稿を見るか、他の誰かが彼の答えを拡張して、価値を返す方法を含めることができるでしょう。
必要な他の情報がある場合はお知らせください。
敬具
灰
解決
基本的に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();
}
Invocationが完了したときに呼び出されるデリゲートを使用する追加のパラメーターを追加しました。次に、この方法で使用できます。
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);
}
所属していません StackOverflow