質問

私はサイトの他の質問を調べてきましたが、この投稿を見つけました。

スタックオーバーフローオリジナルポスト

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);
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top