我试图使用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}); 我在这里做错了什么?请纠正我。
发布于 2013-02-15 07:18:36
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>。在返回out的方法中,几乎不应该使用void参数。在我看来,out参数的有效设计是让您返回多个值--如果您只想返回一个值,请使用返回类型!
https://stackoverflow.com/questions/14889873
复制相似问题