Dispatcher.Invoke with Action delegate

本文关键字:delegate Action with Invoke Dispatcher | 更新日期: 2023-09-27 17:59:32

我正在尝试使用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});  

我在这里做什么不对。请纠正我。

Dispatcher.Invoke with Action delegate

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参数被有效地设计为允许您返回多个值——如果您只想返回一个值,请使用返回类型!