2013-02-15 63 views
1

我想使用Action<string, bool>類型的委託來調用Dispatcher.InvokeDispatcher.Invoke與Action委託

命名法detegate

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

使用。當我用下面這給出了一個錯誤說不符合簽名。

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

我在這裏做什麼錯。請糾正我。

回答

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>代替。您應該幾乎從不在返回void的方法中使用out參數。在我看來,out參數的設計有效,可讓您返回多個值 - 如果您只想返回一個值,請使用返回類型!

+0

好的。我明白我想要做什麼錯。你的回答完全解決了我的問題。我將使用'Func '。感謝你的回答。 – 2013-02-15 07:25:20