2012-07-14 63 views
4

我正在使用VS2008中的WPF应用程序,并决定从其他WPF应用程序中重用一些代码。不过,我有以下行一个奇怪的问题:无法将lambda表达式转换为类型'System.Delegate',因为它不是委托类型

Message.Dispatcher.Invoke(() => { Message.Text = "Looking for orders..."; }); 

此代码工作正常在原来的应用程序,但抛出正常的“无法转换lambda表达式键入‘System.Delegate’,因为它不是一个委托类型”新应用程序中出现错误。

我知道我可以将该表达式作为一个Action来投入使用;但我很好奇为什么同一段代码在一个项目中编译和工作,而不是另一个。

回答

6

在处理投射的旧项目中可能存在定义的扩展方法!

喜欢的东西:

public static void Invoke(this Dispatcher dispatcher, Action action) 
{ 
    dispatcher.Invoke((Delegate)action); 
} 

然后,你可以只是在不麻烦如下:

Message.Dispatcher.Invoke(() => { Message.Text = "Looking for orders..."; }); 

更新:
原来.NET Framework中有一组扩展方法分派器是已经可以处理这些东西了。

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

+0

嗨,彼得。感谢你的回答。我在代码中寻找扩展方法;但没有找到任何。不过,我确实发现了一个从System.Windows.Threading命名空间链接的DispatcherExtensions类。 – oliver 2012-07-14 10:46:28

+7

为了防止任何人感兴趣,添加对System.Windows.Presentation.dll的引用包括DispatcherExtensions类 – oliver 2012-07-14 11:04:04

+0

Hi Oliver。酷 - 不知道这堂课。我已经更新了答案,并附有课程文件的链接。 – 2012-07-14 11:10:32

相关问题