WPF中PropertyChangedEvent中的跨线程异常

WPF中PropertyChangedEvent中的跨线程异常,wpf,multithreading,wpf-controls,Wpf,Multithreading,Wpf Controls,我有一个绑定到自定义集合的ListView 在运行时,我正在更新ViewModel中自定义集合中实体的某些属性。同时,我还在listview中进行自定义排序 当我单击listview的任意列标题时,自定义排序是适用的 例如,我每5秒更新一次实体上的当前日期时间,同时根据日期时间应用自定义排序 (Listview是第三方控件) 因此,我同时对自定义集合执行两个操作 我是否应该在视图模型中传递控件的调度程序,并通过UI调度程序调用任何方法(更新自定义集合中的任何实体)?如果要更新UI,必须使用调度程

我有一个绑定到自定义集合的ListView

在运行时,我正在更新ViewModel中自定义集合中实体的某些属性。同时,我还在listview中进行自定义排序

当我单击listview的任意列标题时,自定义排序是适用的

例如,我每5秒更新一次实体上的当前日期时间,同时根据日期时间应用自定义排序

(Listview是第三方控件)

因此,我同时对自定义集合执行两个操作


我是否应该在视图模型中传递控件的调度程序,并通过UI调度程序调用任何方法(更新自定义集合中的任何实体)?

如果要更新UI,必须使用调度程序,没有其他方法更新UI

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

您是否仅将线程用于更新实体属性?如果是这样,使用dispatcher将导致删除使用线程的意义,因为所有操作最终都将由UI线程完成。您可以更好地将排序逻辑放在不同的线程中。一些代码无论如何都会有帮助。

排序逻辑内置于listview(第三方控件)中,并且listview似乎只在UI线程中进行排序。@Ashish Ashu:那么您是否只使用线程更新实体属性?每5秒你怎么做一次?使用秒表?这是从另一个dll公开的回调方法。它发送通知,并基于此我更改了集合中某个实体的status属性。这似乎与Jason Dolinger在该链接中的示例应用相同,他使用Dispatcher在从服务检索项目时更改集合。