我有許多Windows窗體控件用於與我的程序對象進行交互。目前他們在對象上訂閱「已更新」事件,並在需要時手動更新值。我想用數據綁定替換這個樣板代碼的所有(或儘可能多的)代碼。.NET數據綁定的跨線程問題
我遇到的問題是對象狀態可以隨時由幾個不同的線程中的任何一個修改。目前我使用Invoke()來處理這個問題,這很好,但是當我切換到數據綁定時,我被非法的跨線程控制異常所淹沒。有沒有一種首選的方法可以使用數據綁定來優雅地處理這個問題,還是我現在最好的方式就是讓事情保持現狀呢?
謝謝!
我有許多Windows窗體控件用於與我的程序對象進行交互。目前他們在對象上訂閱「已更新」事件,並在需要時手動更新值。我想用數據綁定替換這個樣板代碼的所有(或儘可能多的)代碼。.NET數據綁定的跨線程問題
我遇到的問題是對象狀態可以隨時由幾個不同的線程中的任何一個修改。目前我使用Invoke()來處理這個問題,這很好,但是當我切換到數據綁定時,我被非法的跨線程控制異常所淹沒。有沒有一種首選的方法可以使用數據綁定來優雅地處理這個問題,還是我現在最好的方式就是讓事情保持現狀呢?
謝謝!
如果您將數據綁定到正在從底層線程更新的數據源,那麼您必須通過調用Invoke
將更新的代碼移動到UI線程。
或者,如果你願意,你可以得到一個ISynchronizeInvoke
實現(或SynchronizationContext
),並有在UI線程上的所有事件火災。當然,這可能會導致您的代碼出現意想不到的問題,因爲您並未首先在UI線程上觸發事件。
+1使用'SynchronizationContext' - 正如你提到它可能會識別未知的問題,但清理線程錯誤很少是一個壞主意 – STW 2010-06-09 20:47:10
你可以顯示你的代碼之前和之後。 – ChrisF 2010-06-09 19:42:10