WPF跨线程访问线程安全的数据(如解决:该类型的CollectionView不支持从调度程序线程以外的线程对其SourceCollection)
2010-03-07 13:05
537 查看
典型应用场景:WPF页面程序中,ListView的ItemsSource是一个ObservableCollection<StudentInfo>;
操作:另起一个线程,为ListView动态更新数据,也就是给ObservableCollection<StudentInfo>添加记录。这类操作,就是跨线程访问线程安全的数据,如果不使用Dispatcher,就会导致出错“该类型的CollectionView不支持从调度程序线程以外的线程对其SourceCollection”。
解决方案:
操作:另起一个线程,为ListView动态更新数据,也就是给ObservableCollection<StudentInfo>添加记录。这类操作,就是跨线程访问线程安全的数据,如果不使用Dispatcher,就会导致出错“该类型的CollectionView不支持从调度程序线程以外的线程对其SourceCollection”。
解决方案:
public void SearchClient() { _pageControlBll.ReflushListView(); Dispatcher dispatcher = _pageControlBll.GetPageControlDispater(); ThreadPool.QueueUserWorkItem(delegate { for (int i = 0; i < 10; i++) { StudentInfo si = new StudentInfo(); si.SortIndex = i + 1; si.ClientIp = "ip:" + i ; si.StudentName = "name:" + i; dispatcher.Invoke(new AddAStudentEvent(this.AddAStudent), si); Thread.Sleep(100); } }); } private delegate void AddAStudentEvent(StudentInfo si); private void AddAStudent(StudentInfo si) { _pageControlBll.TheStudentCollection.Add(si); }
相关文章推荐
- Wpf ViewModel中 ObservableCollection不支持从调度程序线程以外的线程对其 SourceCollection 进行的更改
- [WPF]绑定到界面的数组不支持调度线程以外对其更改的办法
- ListView中开启线程查询更新数据导致的ViewHolder错乱问题解决
- 使用的 SQL Server 版本不支持数据类型“datetime2”的错误解决方法
- opencv Mat 类型数据传递,出现访问冲突,有解决方法,但不知原因
- 使用的 SQL Server 版本不支持数据类型“datetime2”解决办法
- 解决Asp.net 程序在 IIS 5.1 上运行不支持转换Decimal类型小数点的问题
- 使用的 SQL Server 版本不支持数据类型“datetime2”解决办法
- 使用的 SQL Server 版本不支持数据类型“datetime2”解决办法
- net控件中数据导到Excel的格式 首先,我们了解一下excel从web页面上导出的原理。当我们把这些数据发送到客户端时,我们想让客户端程序(浏览器)以excel的格式读取它,所以把mime类型设为:application/vnd.ms-excel,当excel读取文件时会以每个cell的格式呈现数据,如果cell没有规定的格式,则excel会以默认的格式去呈现该cell的数据。这样就给我们提供了自定义数据格式的空间,当然我们必须使用excel支持的格式。下面就列出常用的一些格式: 1) 文本
- [转]WPF and Silverlight 学习笔记(二十五):使用CollectionView实现对绑定数据的排序、筛选、分组
- 用了invoke还是出错的解决方法.wpf 调用线程无法访问此对象,因为另一个线程拥有该对象。
- WPF中调用线程无法访问此对象,因为另一个线程拥有该对象 的解决方法
- EF(Entity Framework)发生错误”正在创建模型,此时不可使用上下文“的解决办法。 正在创建模型,此时不可使用上下文。如果在 OnModelCreating 方法内使用上下文或如果多个线程同时访问同一上下文实例,可能引发此异常。请注意不保证 DbContext 的实例成员和相关类是线程安全的。 临时解决了这个问题,在Context的构造函数中,禁用了自动初始化:
- WCF学习笔记(四):转载MSDN,数据协定序列化程序支持的类型
- WPF调用线程 解决“调用线程无法访问此对象,因为另一个线程拥有该对象“问题
- wpf,CollectionViewSource,使用数据过滤 筛选 功能。
- WPF中使用Free解决访问非UI线程创建的对象抛出的Thread异常
- 使用的 SQL Server 版本不支持数据类型“datetime2”解决办法
- 微信小程序添加web-view业务域名,"不支持打开非业务域名"解决办法