2012-07-14 51 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

相關問題