调用线程无法访问此对象,因为另一个线程拥有该对象问题,这种情况往往很常见,比如:说Timers和DoubleAnimation也就是计时器和动画一起使用就会出来这个错误。
其实加上一句话就行了,作用是:将要执行的操作调度到 UI 线程上执行。
这样做可以确保在 UI 线程上执行操作,避免跨线程访问 UI 元素引发的异常。
另外, this.Dispatcher.Invoke 方法并不是异步的,它会阻塞当前线程直到操作执行完成。
如果需要异步执行操作,可以考虑使用 this.Dispatcher.BeginInvoke 方法或者使用 Task.Run 方法来在后台线程执行操作。
this.Dispatcher.Invoke(new Action(delegate{
//要做的事
}))
实现该问题及解决办法
1:下面写的是一个使用计时器去定时执行动画的逻辑:
2:其实也就是实现一个,让页面产生一个随机数,然后同时2秒去控制下整个页面的一个显示及隐藏。
页面代码:
3:问题出现:调用线程无法访问此对象,因为另一个线程拥有该对象问题?
4:问题解决:这个问题感觉也就是相当于,派一个人不能同时去执行多个事,不能一心二用的意思吧。
在一个Timers事件里面,让它去异步执行,问题就可以解决
5:然后改完运行,问题不存在了,完全是按照自己的逻辑去实现的。