Enu*_*umy 1 c# invoke dispatcher
我得到Cannot convert lambda expression to type 'System.Delegate'错误的同时:
this.Dispatcher.Invoke((Delegate)(() =>
{
this.Focus();
if (!moveFocus)
return;
this.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
}), DispatcherPriority.Background, new object[0]);
Run Code Online (Sandbox Code Playgroud)
我查阅了有关它的所有帖子,但我无法弄清楚/明白为什么?并且答案也没有解决我的问题.
Lambda表达式不能Delegate直接转换为.但是,如果方法需要某个类型的委托(例如Action),则可以使用lambda表达式而不进行强制转换.例如,在.Net 4.5中存在以下重载:
public void Invoke(Action callback,DispatcherPriority priority)
Run Code Online (Sandbox Code Playgroud)
这意味着你可以这样做:
this.Dispatcher.Invoke(() =>
{
//...
}, DispatcherPriority.Background);
Run Code Online (Sandbox Code Playgroud)
但是.Net 4或之前不存在过载.所以你必须投射到Action:
this.Dispatcher.Invoke((Action)(() =>
{
...
}), DispatcherPriority.Background);
Run Code Online (Sandbox Code Playgroud)
请注意,我删除了new object[0].它不需要,因为Action不采取任何参数.