2013-02-15 140 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