2010-05-14 66 views
0

我有一個綁定到我的自定義集合的ListView。WPF中的PropertyChangedEvent中的跨線程異常

在運行時,我更新了ViewModel中自定義集合中實體的某些屬性。同時,我也在做listview中的自定義排序。

自定義排序適用於當我點擊列表視圖的任何列標題。

例如,我每5秒更新一次實體上的當前日期時間,同時我正在應用基於DateTime的自定義排序。

(Listview是第三方控件)。

因此,我在同一時間對自定義集合執行了兩個操作。

我應該在視圖模型中傳遞我的控件的調度程序,並通過UI調度程序調用任何方法(它更新我的自定義集合中的任何實體)?

回答

0

您是否僅使用您的線程來更新實體屬性?如果是這樣,使用調度程序將導致刪除使用線程的含義,因爲所有操作最終都將由UI線程完成。你最好把你的排序邏輯放在不同的線程中。反正有些代碼會有幫助。

+0

排序邏輯內置在一個列表視圖(第三方控制),似乎listview只在UI線程中執行它。 – 2010-05-14 08:29:36

+0

@Ashish Ashu:你是否只用你的線程來更新你的實體屬性?你怎麼這樣做每5秒?使用秒錶? – Amsakanna 2010-05-14 09:19:42

+0

它是從另一個dll暴露的回調方法。它發送通知,並基於該通知我更改了集合中實體的狀態屬性。 – 2010-05-14 09:43:12

0

如果你想更新UI,你必須使用調度器,沒有其他方式來更新UI。

Dispatcher.BeginInvoke(DispatcherPriority.Background, 
         (Action) delegate 
         { 
          //You can update your UI here 
         });