美文网首页
线程操纵UI问题

线程操纵UI问题

作者: Lulus | 来源:发表于2017-12-29 17:54 被阅读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() 启动消息循环的最终途径。

1 2

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

相关文章

  • 线程操纵UI问题

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

  • Android AsyncTask的理解

    AsyncTask可以正确,轻松地使用UI线程。 此类允许您执行后台操作并在UI线程上发布结果,而无需操纵Thre...

  • AsyncTask详解

    AsyncTask是什么? AsyncTask这个类允许在后台执行操作并在UI线程上更新结果而不用必须操纵主线程或...

  • Android UI线程

    思考: 1.什么是UI线程? 2.UI线程是主线程吗? 什么是UI线程? 先必须了解下面2个问题1.顾名思义 UI...

  • 关于Android在非UI线程更新UI的问题。

    为了解决在Android非UI线程更新UI这个问题,Android提供了一些方法,从其他线程访问UI线程。 Act...

  • 走马观花之-AsyncTask

    AsyncTask类声明   AsyncTask可以更简单地使用UI线程。该类允许你在后台执行操作,且不需要操纵线...

  • 线程通讯详解

    关于子线程能否更新UI的思考线程通讯详解线程池-多线程的高效使用姿势 上文我们说到了关于子线程中能否更新UI的问题...

  • Java 多线程基本操作

    title: 线程基本操纵date: 2019-04-18 23:31:11tags:Thread 线程基本操纵 ...

  • iOS 线程与队列之间的关系

    引导问题:UI刷新,为什么需要在主线程中执行? 原因一:UIKit的操作不是线程安全的 在多个线程下进行UI操作,...

  • 面试题:Android 为什么设计只有主线程更新UI

    选择方案的选择 单线程更新UI 多线程更新UI 从问题本身考虑就两个方案不是单线程就是多线程。 下面是个人根据具体...

网友评论

      本文标题:线程操纵UI问题

      本文链接:https://www.haomeiwen.com/subject/rohwgxtx.html