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});
我在这里做什么不对。请纠正我。
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
参数被有效地设计为允许您返回多个值——如果您只想返回一个值,请使用返回类型!