异步编程踩坑——Threading.Timer下的Dispatcher.BeginInvoke()
这个问题很奇怪,情况是当我使用Threading.Timer计时器时,每隔一段事件自动触发一个回调方法。在回调方法中为了修改UI控件。使用了Dispatcher.BeginInvoke()方法来显示一个窗口,但我发现这个窗口总是弹不出来。换成Invoke()就好了。
由于Threading.Timer是基础线程池实现的定时器,当我调用Dispatcher.BeginInvoke()时不会阻塞该线程,线程继续执行到结束。如果使用Invoke(),则会阻塞当前线程等待UI线程执行对应的逻辑后返回继续向下执行。这个问题我一直没找到解决方法,目前只能说如果出现了这种情况就是用Invoke()方法,去更新线程得到的结果。

浙公网安备 33010602011771号