2012-12-11 63 views
0

我收到異常「System.InvalidOperationException:跨線程操作無效」我懷疑控制上的數據填充來自另一個線程而不是UI。任何理由?我看到調用或開始調用可以做一些好的結果,如果是的話我怎麼能在我的代碼中使用它?還是我們有其他替代mechanism.Following是跟蹤我得到錯誤:System.InvalidOperationException:跨線程操作無效

   Control control = null; 
       object ancestor = Parent; 

在那裏我可以在這裏使用InvokeRequired,有什麼想法?

+0

作爲一般規則,只有UI線程應更新UI。 – StingyJack

+0

您是否需要在執行WhenUpdated()時讓UI響應其他用戶請求? – StingyJack

+0

@StingyJack是的UI應該是響應時間 – ponting

回答

0

通常,您希望使用BackgroundWorker以非阻塞方式更新UI。

這允許您運行重複或長時間運行的後臺操作,該操作可以向用戶界面線程報告需要更新的詳細信息。

BeginInvoke是完成相同目標的.NET 1.1方式,但很大程度上被後臺工作人員所取代。

如果您使用.net 4.5,也可以使用Async選項。他們可能不是一個直接的替代品。

+0

謝謝,但我們有任何機制,而不是背景工作者來防止這個問題,我已經看到invokerequired會做,但我不知道如何使用它? – ponting

+2

看看在這個問題的答案中建議的一些其他選擇。 http://stackoverflow.com/q/1132472/16391 – StingyJack

-2

只需在表單加載事件中編寫此代碼即可。

CheckForIllegalCrossThreadCalls = false;

在這之後你的代碼運行正常......但是請記住,橫紗應該是安全的..

+1

-1:請不要這樣做。跨線程UI調用可能會導致各種奇怪的行爲,因此修復它不會執行跨線程調用。 –