在Invoke时无法将lambda表达式转换为'System.Delegate'类型

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)

我查阅了有关它的所有帖子,但我无法弄清楚/明白为什么?并且答案也没有解决我的问题.

Ere*_*mez 6

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不采取任何参数.