WPF子线程更新UI(Dispatcher.BeginInvoke)

 

   在做WPF开发时,如果直接在子线程里更新UI会报错—–“调用线程无法访问此对象,因为另一个线程拥有该对象。”,这是因为WPF禁止在非UI线程里直接更新UI界面。



解决方案:
  在子线程里调用Dispatcher.BeginInvoke()或者Invoke()方法。

   例如更新一个Button上的文字内容,可以在子线程里这样写:

this.myButton.Dispatcher.BeginInvoke(new Action(()=>
{ 
    this.myButton.Content = "change button content!!!";
}));
1
2
3
4
  这里使用了Action()委托。Dispatcher.BeginInvoke()代表异步执行,不等待委托结束就更新。Dispatcher.Invoke()代表同步执行,需等待委托执行完成。

 

posted @ 2019-10-21 10:32  DarJeely  阅读(556)  评论(0编辑  收藏  举报