匿名函数(lambda表达式和匿名方法)必须被转换为特定委托类型,而Dispatcher.BeginInvoke
只是需要Delegate
。有两种选择...
仍然使用现有的BeginInvoke
调用,但指定了委托类型。有各种方法在这里,但我一般提取匿名函数到以前的说法:
Action action = delegate() {
this.Log.Add(...);
};
Dispatcher.BeginInvoke(action);
上Dispatcher
编写扩展方法,它利用了Action
代替Delegate
:
public static void BeginInvokeAction(this Dispatcher dispatcher,
Action action)
{
Dispatcher.BeginInvoke(action);
}
然后就可以调用采用隐式转换的扩展方法
this.Dispatcher.BeginInvokeAction(
delegate()
{
this.Log.Add(...);
});
我还鼓励您使用lambda表达式,而不是匿名方法,一般来说:
Dispatcher.BeginInvokeAction(() => this.Log.Add(...));
编辑:正如在评论中指出,Dispatcher.BeginInvoke
获得了.NET 4.5超载直接接受一个Action
,所以在这种情况下,你不需要扩展方法。
采取这里看看http://stackoverflow.com/questions/4936459/dispatcher-begininvoke-cannot-convert-lambda-to-system-delegate – MethodMan 2013-04-10 20:38:01