我正在开发VS2008中的WPF应用程序,并决定重用其他WPF应用程序中的一些代码。但是我对以下行有一个奇怪的问题:
Message.Dispatcher.Invoke(() => { Message.Text = "Looking for orders..."; });
此代码在原始应用程序中正常工作但抛出正常的“无法将lambda表达式转换为类型'System.Delegate',因为它不是新的应用程序中的委托类型”错误。
我知道我可以将表达式作为一个动作来使其发挥作用;但我很好奇为什么同一段代码在一个项目中编译和工作而不是另一个项目。
答案 0 :(得分:6)
可能在旧项目中的某处定义了一个处理转换的扩展方法!
类似的东西:
public static void Invoke(this Dispatcher dispatcher, Action action)
{
dispatcher.Invoke((Delegate)action);
}
然后您可以毫无困难地执行以下操作:
Message.Dispatcher.Invoke(() => { Message.Text = "Looking for orders..."; });
更新:
事实证明,.NET Framework为Dispatcher提供了一组扩展方法,可以处理已构建的这类内容。
http://msdn.microsoft.com/en-us/library/system.windows.threading.dispatcherextensions.aspx