4

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

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

此代码在原始应用程序中运行良好,但在新应用程序中引发正常的“无法将 lambda 表达式转换为类型 'System.Delegate',因为它不是委托类型”错误。

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

4

1 回答 1

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

于 2012-07-14T10:26:28.803 回答