在wpf的项目中,由于第一次需要加载大量文件相关的属性。导致第一次开启程序非常的慢。于是使用到了后台线程处理。但是在线程中调试发现报错"调用线程无法访问此对象,因为另一个线程拥有该对象。"的提示。
出现上面的异常是因为多个线程在同时访问一个对象造成的,在网上查看了一些资料,说的是在C#2005后不再支持多线程直接访问界面的控件(界面创建线程与访问线程不是同一个线程),但是可以使用delegate来解决。
相应的解决方法如下:
Application.Current.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Background,
new Action(() =>{
//业务逻辑代码
}));
线程访问的问题解决了 ,但又引出了一个新的问题。地图列表中的暂无地图数据的提示不会消失了。
此时在业务逻辑代码处理完后加入消息通知(OnPropertyChanged)就解决了问题。
Application.Current.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Background,
new Action(() =>{
//业务逻辑代码
//需要通知更新的数据源
OnPropertyChanged("ProjectItems");
}));