1

Action<string, bool>デリゲートのタイプを使用して、Dispatcher.Invoke

detegateで使用する名前付きメソッド

private void SomeMethod(string name,out bool result)
{
    ...
}  

以下を使用すると、署名と一致しないというエラーが表示されます。

Dispatcher.Invoke(new Action<string, bool>(SomeMethod),new Object[2]{name, result});  

私がここでやっているのは何が悪いのか。訂正してください。

4

1 に答える 1

2

Action<,>outパラメータがありません。次のように、独自のデリゲートを使用する必要があります。

public void ActionOut<T1, T2>(T1 input, out T2 output)

それはうまくいくかもしれません(例外をスローしないという点で)-私はそれが反省でうまくいくと確信しています。についてはよくわかりませんDispatcher.Invoke。ただし、結果値は変数に残されませresultん。配列に残され、無視されます。あなたが望むだろう:

object[] args = new object[] { name, null };
Dispatcher.Invoke(new ActionOut<string, bool>(SomeMethod), args);
result = (bool) args[1];

ただし、メソッドに結果を返すFunc<string, bool>ようにして、代わりに使用する方がよいでしょう。を返すメソッドでパラメータを使用することはほとんどありません。私の考えでは、パラメータは複数の値を返すことができるように効果的に設計されています。1つの値だけを返したい場合は、戻り型を使用してください。outvoidout

于 2013-02-15T07:18:36.547 に答える