大家都知道在WPF中对非UI线程中要处理对UI有关的对象进行操作,一般需要使用委托的方式,代码基本就是下面的写法
App.Current.MainWindow.Dispatcher.Invoke(new Action(() => { //TODO:更改UI相关的操作 }));
我以前也总是如此写法,没出现过毛病,可是偏偏就在今日,我在串口接收事件中这样写报错了,错误提示说:“
其他线程拥有此对象,此线程不能使用”,对于没有多少底子的我当时肯定是一脸蒙圈了,还是去群里问问吧,一问果
然是高手给出了解答,问题就出在对App.Current.MainWindow的调用上,因为这个调用会触发VerfiyAccess(),所以
会报线程调用异常的错误。既然知道了问题所在,那解决办法是什么呢?
答案就是,一般都会在一个静态类中存储主窗体的Dispatcher对象,以备不时之需啊,而且非常环保,比处处都要写
App.Current.MainWindow.Dispatcher.Invoke 这么一长串方便多了。