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

来源:百度文库 编辑:九乡新闻网 时间:2024/07/14 01:53:43

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

分类:c#基础原创WPF2010-03-07 13:05626人阅读评论(2)收藏举报

典型应用场景:WPF页面程序中,ListView的ItemsSource是一个ObservableCollection

操作:另起一个线程,为ListView动态更新数据,也就是给ObservableCollection添加记录。这类操作,就是跨线程访问线程安全的数据,如果不使用Dispatcher,就会导致出错“该类型的CollectionView不支持从调度程序线程以外的线程对其SourceCollection”。

 

解决方案:

 

view plain
  1. public void SearchClient()  
  2.         {  
  3.             _pageControlBll.ReflushListView();  
  4.             Dispatcher dispatcher = _pageControlBll.GetPageControlDispater();  
  5.             ThreadPool.QueueUserWorkItem(delegate  
  6.             {  
  7.                 for (int i = 0; i < 10; i++)  
  8.                 {  
  9.                     StudentInfo si = new StudentInfo();  
  10.                     si.SortIndex = i + 1;  
  11.                     si.ClientIp = "ip:" + i ;  
  12.                     si.StudentName = "name:" + i;  
  13.                     dispatcher.Invoke(new AddAStudentEvent(this.AddAStudent), si);  
  14.                     Thread.Sleep(100);              
  15.                 }  
  16.             });  
  17.   
  18.         }  
  19.         private delegate void AddAStudentEvent(StudentInfo si);  
  20.         private void AddAStudent(StudentInfo si)  
  21.         {  
  22.             _pageControlBll.TheStudentCollection.Add(si);  
  23.         }