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)

可能有效(就不引发异常而言) - 我相信它会通过反思;我不太确定 with Dispatcher.Invoke。它不会将结果值留在您的result变量中 - 它会将其留在数组中,然后您将忽略它。你会想要:

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

但最好只让方法返回结果,并使用 aFunc<string, bool>代替。您几乎应该在返回的方法中使用out参数void。在我看来,out参数被有效地设计为让您返回多个值 - 如果您只想返回一个值,请使用返回类型!

于 2013-02-15T07:18:36.547 回答