无法将lambda表达式转换为类型'System.Delegate',因为它不是委托类型

oli*_*ver 4 c# wpf lambda

我正在使用VS2008中的WPF应用程序,并决定重用另一个WPF应用程序中的代码.但是我对以下行有一个奇怪的问题:

Message.Dispatcher.Invoke(() => { Message.Text = "Looking for orders..."; });
Run Code Online (Sandbox Code Playgroud)

此代码在原始应用程序中正常工作,但抛出正常的"无法将lambda表达式转换为类型'System.Delegate',因为它不是新的应用程序中的委托类型"错误.

我知道我可以将表达式作为一个动作来使其发挥作用; 但我很好奇为什么同一段代码在一个项目中编译和工作而不是另一个项目.

Pet*_*sen 6

可能在旧项目中的某处定义了一个处理转换的扩展方法!

就像是:

public static void Invoke(this Dispatcher dispatcher, Action action)
{
    dispatcher.Invoke((Delegate)action);
}
Run Code Online (Sandbox Code Playgroud)

然后你可以毫无困难地做以下事情:

Message.Dispatcher.Invoke(() => { Message.Text = "Looking for orders..."; });
Run Code Online (Sandbox Code Playgroud)

更新:
结果.NET Framework为Dispatcher提供了一组扩展方法,可以处理已构建的这类内容.

http://msdn.microsoft.com/en-us/library/system.windows.threading.dispatcherextensions.aspx

  • 以防万一其他人有兴趣; 添加对System.Windows.Presentation.dll的引用包括DispatcherExtensions类 (7认同)