2009-08-19 60 views
0

我們有一些一段代碼有兩種版本的.NET表現不同: * 3.0.30618(最新的.NET 3.0版本) * 3.0.04506(.NET 3.0 RTM)發佈說明/ .NET的歷史?問題的BeginInvoke

它不在RTM版本中工作。我們將問題追溯到system.windows.threading.dispatcher.BeginInvoke的調用。這位代表從未跑過。

解決此問題的任何提示或建議?

回答

1

發現問題。

在.NET 3.0(3.0.04506),BeginInvoke的具有下列重載:

  1. Dispatcher.BeginInvoke(的DispatcherPriority, 代表);
  2. Dispatcher.BeginInvoke(DispatcherPriority, Delegate,Object);
  3. Dispatcher.BeginInvoke(DispatcherPriority, Delegate,Object,Object []);

使用3.0 SP2(3.0.30618),添加以下內容。

  1. Dispatcher.BeginInvoke(Delegate,Object []); < ---我們正在使用這一個
  2. Dispatcher.BeginInvoke(Delegate,DispatcherPriority,Object []);

當與.NET的RTM版本的機器上運行,由於該方法現在還沒有, 一個MissingMethod拋出異常,因此從未執行委託。

的解決方案,現在是使用「舊」過載:Dispatcher.BeginInvoke(DispatcherPriority, Delegate);

現在,這真的很爛。沒有人可以使用新的超負荷和晚上睡覺。 現在去追捕爲什麼這個例外被默默地處理了......

謝謝大家!

+0

我不明白爲什麼你會得到一個MissingMethodException ...該方法仍然存在嗎?令人困惑的是,「舊」重載不會出現在我的離線MSDN中... – 2009-08-19 12:05:24

+0

該方法不適用於那裏的RTM版本的.NET。這就是代表未運行的環境。 – moogs 2009-08-19 12:11:40

0

RTM是該框架的早期版本。這意味着它不是完​​全穩定的,並且它很可能是一個錯誤。考慮到.NET 3.0已經在發佈形式中存在了多長時間,我對解決這個「問題」的建議很簡單,就是更新.NET。

忽略這一點,但我會離開答案本身,所以評論生存。

+0

「RTM」不是預發佈 - 它是「發佈到製造」。 – 2009-08-19 11:19:28

+0

RTM意味着發佈到製造。所以它已滿... – Kieron 2009-08-19 11:19:52

+0

我的錯誤。我不知道它是什麼意思,除了幾個參考文獻和beta版本之外,google並沒有什麼特別的幫助。 – 2009-08-19 11:22:07

1

我強烈嫌疑這是一個錯誤的地方在你的代碼,哪怕原來的.NET 3.0和以後的版本之間的差異。

我建議你像解決其他任何問題一樣解決它:縮小你的代碼到最低限度顯示問題。那麼它應該比較清楚你的代碼中是否是框架錯誤或者錯誤。

+0

發現問題(我發佈了答案)。現在這個錯誤在我們的代碼中,一個例外被無聲地處理(喘氣!)。 – moogs 2009-08-19 11:57:44