您的位置:首页 > 其它

WPF跨线程访问线程安全的数据(如解决:该类型的CollectionView不支持从调度程序线程以外的线程对其SourceCollection)

2010-03-07 13:05 537 查看
典型应用场景:WPF页面程序中,ListView的ItemsSource是一个ObservableCollection<StudentInfo>;

操作:另起一个线程,为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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐