首页 > 编程语言 > 详细

线程操纵UI问题

时间:2017-12-29 18:07:53      阅读:203      评论:0      收藏:0      [点我收藏+]

WPF只允许UI线程修改UI,其他线程必须通过Invoke、委托(安全性)
Winform可以开启/关闭“只允许UI线程修改UI”

在WPF中非UI线程修改UI的方法

非UI线程直接修改UI,会报错

System.InvalidOperationException:“调用线程无法访问此对象,因为另一个线程拥有该对象。”

正确的做法是

Task t = new Task(() =>
{
    NameLabel.Dispatcher.Invoke(new Action(delegate
    {
        NameLabel.Content = "我用UI线程修改了NameLabel的文字";
    }));
});
t.Start();
示例代码

https://github.com/zLulus/NotePractice/tree/dev3/WPF/WpfDemo/ChangeUI

补充:Dispatcher(调度员)

使用一个专用的 UI 线程来完成界面的操作和更新,这个线程会关联一个唯一的WPF Dispatcher 对象,用于调度按优先顺序排列的工作项队列。Application.Run() 实际上就是对 Dispatcher.Run() 的间接调用。

WPF Dispatcher通过循环来处理工作项队列,这个循环通常被成为 "帧 (DispatcherFrame)"。Dispatcher.Run() 创建并启动这个帧,这也是 Application.Run() 启动消息循环的最终途径。

 
技术分享图片
 
 
技术分享图片
 

参考资料:
http://developer.51cto.com/art/200912/174005.htm

线程操纵UI问题

原文:https://www.cnblogs.com/Lulus/p/8145717.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!