首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏sofu456

    后台线程ui线程

    后台线程 mfc AfxBeginThread创建函数或者对象中的静态函数 dotnet Task.Run或者new Thread ui线程 mfc 继承CWinThread、给子类绑定dialog ,窗口在独立的线程中初始化和析构。 virtual BOOL InitInstance(); virtual int ExitInstance(); protected: DECLARE_MESSAGE_MAP() }; dotnet 在线程中创建的 ui属于本线程资源不能跨线程使用

    70810发布于 2020-02-18
  • 来自专栏听雨堂

    线程调用UI线程的方法

    vs2005中,子线程不允许使用UI中的控件,网上的解决方法都有:使用控件的Invoke,不过在我自己的应用中总觉得麻烦:我要从子线程中调用一个主线程中的处理,要用一次委托,而Invoke还要用委托, 我稍微改了一下结构,可以比较方便的达到在子线程中调用UI线程中的处理函数。 在线程类中,定义 public delegate void ReceivedHandlerUI(object obj);     //接收处理,涉及UI 使用两个变量,第二个只要是界面中的任意控件都行, 主要是利用它回到UI线程 public ReceivedHandlerUI OnReceivedUI;  //接收处理函数,涉及UI public System.Windows.Forms.Control 同时,由于是在UI线程中执行,所以操作控件时也不用考虑并发性线程安全之类的。

    1.7K80发布于 2018-01-23
  • 来自专栏林德熙的博客

    win10 uwp 非ui线程访问 ui

    大家都知道,不可以在 其他线程访问 UI 线程,访问 UI 线程包括给 依赖属性设置值、读取依赖属性、调用方法(如果方法里面修改了依赖属性)等。 一旦访问UI线程,那么就会报错,为了解决这个问题,需要使用本文的方法,让后台线程访问 UI 线程。 本文提供三个方法可以让其他线程访问 UI 线程 第一个方法是比较不推荐使用的,可能出现 win10 uwp Window.Current.Dispatcher中Current为null 请不要在这里使用 High ,一般都是使用比较低的优先 为何不设置为 High ,参见 CoreDispatcherPriority 那么比较推荐的一个方法是在一个用户控件或者Page之类的,如果在里面使用了异步线程需要访问 ui 的属性,那么可以使用下面代码 await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => {

    1.3K10发布于 2018-09-18
  • 来自专栏林德熙的博客

    win10 uwp 非ui线程访问 ui

    大家都知道,不可以在 其他线程访问 UI 线程,访问 UI 线程包括给 依赖属性设置值、读取依赖属性、调用方法(如果方法里面修改了依赖属性)等。 一旦访问UI线程,那么就会报错,为了解决这个问题,需要使用本文的方法,让后台线程访问 UI 线程。 本文提供三个方法可以让其他线程访问 UI 线程 第一个方法是比较不推荐使用的,可能出现 win10 uwp Window.Current.Dispatcher中Current为null 请不要在这里使用 High ,一般都是使用比较低的优先 为何不设置为 High ,参见 CoreDispatcherPriority 那么比较推荐的一个方法是在一个用户控件或者Page之类的,如果在里面使用了异步线程需要访问 ui 的属性,那么可以使用下面代码 await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => {

    67740发布于 2019-03-13
  • 来自专栏SAP梦心的SAP分享

    线程UI线程的通信(委托)

    由于项目中存在这样的载入的画面:在界面上有显示载入信息的Label控件和进度条,如果采用单线程则在载入数据的时候UI界面会被锁死,造成假死的感觉。 为了给一个更友好的界面,因此有必要引入多线程技术,使得软件更加“人性化”。 但随后在子线程中访问界面上的控件的时候会出现异常,不能操作主线程所控制的UI界面。看来这得用到委托技术了! 定义线程: ThreadStart ts = new ThreadStart(Downin); //括号里面的参数是一个方法名,表示线程要处理的方法 Thread mythread = new Thread(ts); mythread.Start(); //线程开始运作 以上三行是线程操作的核心内容,不熟悉线程定义和执行原理等的园友请参考《C#线程参考手册》! 本文只是抛砖引玉,可以了解一下线程和委托的好处。当然,线程并不是越多越好,否则只会增加系统开销,应该看实际需要来应用。 注:如有疏漏之处请指教,谢谢。

    87820编辑于 2022-05-07
  • 小程序的UI线程与JS线程优化

    UI线程UI线程负责小程序的界面渲染,包括页面的结构、样式、动画等。小程序的界面展示由微信的引擎渲染,UI线程需要频繁地进行计算和绘制,响应用户的操作。 三、UI线程与JS线程的协作与瓶颈UI线程与JS线程的分离使得它们各自承担不同的任务,但也存在协作瓶颈。 例如,JS线程的执行和UI线程的渲染是互相影响的:JS线程处理完数据后,UI线程需要更新界面;而UI线程在渲染时,如果长时间占用线程,也会影响JS线程的任务执行。1. 避免在UI线程执行复杂任务尽量避免在UI线程上执行复杂计算和资源消耗大的任务。对于页面渲染的操作,应尽量保持UI线程的响应性。 地址:小程序性能优化:从UI线程到JS线程的优化六、结语小程序的UI线程和JS线程是其高效运行的核心组成部分。

    58510编辑于 2025-01-28
  • 来自专栏KyXu

    【iOS UI】iOS 9 GUI 资源分享

    分享的内容包括一个【DesignCode-iOS-9-GUI】Sketch 文件, 和苹果官方释出的【SF-UI、SF-Compact】两种字体的安装包。 DesignCode-iOS-9-GUI.png ? DesignCode-iOS-9-GUI.png ? SF Font.png

    96910发布于 2019-04-11
  • 来自专栏王小二的Android站

    线程能否操作UI控件

    前言 这是一个初级Android工程师面试问题,一般标准答案:子线程不能操作UI控件。 那我为什么还要问这个弱智的问题呢? 因为我心目中的标准答案:子线程不能操作"参与绘制"的UI控件。 “操作UI”理解成“调用View.invalidate()”。 问题也就变成了:子线程能否调用View.invalidate()。 Thread.currentThread不等于mThread(主线程/UI线程),也就是子线程。 四、什么是参与绘制 看完上面的内容,肯定有人说答案不就是子线程不能操作UI控件嘛,为什么还要加上"参与绘制"的条件。 以上情况就是属于“不参与绘制”的情况 总结 现在应该理解我的标准答案:子线程不能操作"参与绘制"的UI控件。

    1K10发布于 2020-06-08
  • 来自专栏移动开发面面观

    Android NDK中的UI线程

    概述 在Android中,UI线程是一个很重要的概念。我们对UI的更新和一些系统行为,都必须在UI线程(主线程)中进行调用。 在Linux中是没有主线程这一概念的。 那么,如果我们在子线程调用了一个native方法,在C++的代码中,我们想要切换到主线程调用某个方法时,该如何切换线程呢? 只是在调用之前,做了线程的转换,在C++层的主线程调用了toast。 通过初始中的这样两个方法,我们就构建了一条通往主线程的通道。 发往主线程 在初始化的方法中,我们构筑了一条消息通道。接下来,我们就需要将消息发送至主线程。 这样,我们只需要在子线程中,以一定的编码格式向主线程发送消息,即可完成在native中切换主线程的能力。 --- 如有问题,欢迎指正。

    3K40发布于 2018-10-29
  • 来自专栏林德熙的博客

    WPF 跨线程 UI 的方法

    本文告诉大家如何在 WPF 使用多线程UI 的方法 在很多的时候都是使用单线程UI 但是有时候需要做到一个线程完全处理一个耗时的界面就需要将这个线程作为另一个 UI 线程 在 WPF 可以使用 VisualTarget 做到多个 UI 线程的绘制,注意这里的 WPF 的渲染线程只有一个,多个 UI 线程无法让渲染的速度加快。 如果一个界面有很多的 Visual 那么渲染速度也不会因为添加 UI 线程用的时间比原来少 在 WPF 的 VisualTarget 可以用来连接多个不同的线程UI 元素,在使用的时候只需要创建,然后在另一个 UI 线程,创建一个 UI 线程的最简单方法是运行 Dispatcher.Run() 和设置线程 STA 才可以,注意这里的 Dispatcher 是静态类 var thread -%E7%9A%84%E6%96%B9%E6%B3%95.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

    2.1K30发布于 2019-03-13
  • 来自专栏dino.c的专栏

    了解模板化控件(9):UI指南

    它们全部都在 Windows.UI.Xaml.Controls.Primitives 命名空间中,如ComboBox.TemplateSettings和ProgressBar.TemplateSettings IsTabStop 要在UI上使用“Tab”键导航到某个控件,需要将这个控件的IsTabStop设置为True(默认值就是True)。如果设置成False,不止不能导航到,而且还不能获得焦点。 简化ControlTemplate 通过简化ControlTemplate可以有效提交UI的性能。 FFFFFFFF" Offset="0" /> <GradientStop Color="#F<em>9</em>FFFFFF <em>9</em>. 符合典型的GUI设计原则 在控件层级就应该将<em>UI</em>设计成符合设计原则,例如对齐,使用字体和颜色突出主要内容,易于操作等。 ?

    1.6K20发布于 2019-01-18
  • 来自专栏性能与架构

    浏览器的UI线程

    所有用于更新用户界面的操作都是由浏览器的UI线程来完成 UI线程维护一个队列,把每个要更新UI的操作都做为一个任务添加到队列中,然后等UI线程空闲时再按顺序进行处理 示例 <button onclick document.createElement("div"); div.innerHTML = "test"; document.body.appendChild(div); } </script> 当用户点击按钮时,会触发UI 线程来创建两个任务,并添加到队列中, 第一个任务是更新按钮的点击状态样式,是浏览器默认的操作 第二个任务是执行 doClick() UI线程空闲下来后,先从队列中取出第一个任务来执行,完成后,再取出第二个任务 ,doClick()中需要创建一个元素并添加到body,这也是一个更新UI的操作,UI线程会再创建一个任务并添加到队列中,然后在UI线程空闲后再次从队列中取出任务来执行 ?

    70170发布于 2018-04-03
  • 来自专栏码上积木

    线程与更新UI,细谈原理

    进入正题,大家应该都听过这样一句话——“UI更新要在主线程,子线程更新UI会崩溃”。久而久之就感觉这是个真理,甚至被认为是“官方结论”。 但是如果问你,官方什么时候在哪里说过这句话,你会不会有点懵。 检查线程,其实就是检查更新UI操作的当前线程是不是当初创建UI的那个线程,这样就保证了线程安全,因为UI控件本身不是线程安全的,但是加锁又显得太重,会降低View加载效率,毕竟是跟交互相关的。 重新运行,在子线程中显示并消失后,点击按钮,不崩溃。 换个手机——三星s9,重新运行,在子线程中的Toast没消失之前点击按钮,不崩溃。 总结 任何线程都可以更新UI,也都有更新UI导致崩溃的可能。 其中的关键就是view被绘制到界面时候的线程(也就是最顶层ViewRootImpl被创建时候的线程)和进行UI更新时候的线程是不是同一个线程,如果不是就会报错。

    1.2K20发布于 2020-11-24
  • 来自专栏胡飞洋的Android进阶

    线程 真的不能更新UI

    UI,没有用handler切到主线程,就会报这个错。 那为啥 子线程更新UI没报错,主线程报错呢? 翻译就是说 只有创建了view树的线程,才能访问它的子view。并没有说子线程一定不能访问UI。 一般情况,UI就是指Activity的view,这也是我们通常称主线程UI线程的原因,其实严谨叫法应该是activity的UI线程。而我们这个例子中,这个子线程也可以称为button的UI线程。 根据handler的相关知识: 因为UI控件不是线程安全的。那为啥不加锁呢?一是加锁会让UI访问变得复杂;二是加锁会降低UI访问效率,会阻塞一些线程访问UI

    1.6K10发布于 2020-07-23
  • 来自专栏Ywrby

    9-线程概念与多线程模型

    线程的属性 线程是处理机调度的单位 多CPU计算机中,各个线程可以占用不同的CPU 每个线程都有一个线程ID,和线程控制块(TCB)用来进行区分 线程同样有就绪,阻塞,运行三种基本状态 线程几乎不拥有系统资源 同一进程的不同线程间可以共享进程的资源 由于同一进程的不同线程间共享内存地址空间,所以各个线程间通信甚至无需系统干预 同一进程中的线程间进行切换,不会引起进程切换 不同进程中的线程进行切换,会引起进程切换 切换同进程中的线程,系统开销很小 切换进程,开销较大 线程的实现方式 用户级线程 用户级线程由应用程序通过线程库实现,所有的线程管理工作都是由应用程序负责的(线程的创建,撤销,切换等等) 用户级线程中 即线程调度,线程切换等工作由内核负责。 因此内核级线程的切换必须在核心态下执行 注意 操作系统只能“看见”内核级线程,因此只有内核级线程才是处理机分配的单位 以下方的多对多模型为例,其由三个用户级线程映射到两个内核级线程上,在用户看来,进程中同时有三个线程并发执行

    37410编辑于 2022-10-27
  • 来自专栏Java小白成长之路

    9次文章:线程

    二、创建线程 模拟多线程,首先需要创建线程。 如果调用run()方法,就属于普通的方法调用,那么整个cpu会根据程序中的顺序,依次执行每一个线程,并且会等待上一个线程全部执行完之后,才会执行下一段线程。那么我们模拟的就不是多线程了,而是单线程。 这时,计算机的cpu会按照时间片的分配,同时进行3条线程。这才是我们模拟的多线程。 t1.start(); t2.start(); t3.start(); } } 查看结果: 路人乙抢到了第--9--张票 路人丙抢到了第--8--张票 路人丙抢到了第--6--张票 路人丙抢到了第-- 三、线程状态 新生状态、就绪状态、运行状态、阻塞状态、死亡状态 1、停止线程 第一种:自然终止,线程体正常执行完毕 第二种:外部干涉: 1)、线程类中 定义 线程体使用的标识 2)、线程体中使用该标识

    36820发布于 2019-09-27
  • 来自专栏静晴轩

    Android子线程更新UI线程方法之Handler

    我们开发应用程序的时候,处于线程安全的原因子线程通常是不能直接更新主线程UI线程)中的UI元素的,那么在Android开发中有几种方法解决这个问题,其中方法之一就是利用Handler处理的。 如何来用~~ Handler是这么定义:主要接受子线程发送的数据, 并用此数据配合主线程更新UI. 这个时候我们需要把这些耗时的操作,放在一个子线程中,因为子线程涉及到UI更新,Android主线程线程不安全的,更新UI只能在主线程中更新.。 (子线程用sedMessage()方法传弟)Message对象,(里面包含数据) , 把这些消息放入主线程队列中,配合主线程进行更新UI。 在里面还有个handler对象,这又涉及到了跨线程修改UI元素内容的问题。在java中是不允许跨线程修改UI元素的,如我们在新启动的线程中想去修改UI线程中TextView的文本时,会报错误的。

    2.7K90发布于 2018-03-27
  • 来自专栏小雨的CSDN

    9.线程的状态

    通过以下代码来获取到线程状态 public static void main(String[] args) { for (Thread.State state : Thread.State.values

    21030编辑于 2022-10-26
  • 来自专栏Devops专栏

    9.线程按序交替

    9.线程按序交替 线程按序交替 - 编写一个程序,开启 3 个线程,这三个线程的 ID 分别为 A、B、C,每个线程将自己的 ID 在屏幕上打印 10 遍,要求输出的结果必须按顺序显示。 那么通过一个锁 Lock 可以创建多个 condition ,例如: 线程1 使用 condition1 来控制阻塞、唤醒 线程2 使用 condition2 来控制阻塞、唤醒 线程3 使用 condition3 如下: 如果当前是线程1,则 调用 condition1.await() 阻塞 线程1,然后调用 condition2.signal() 唤醒 线程2 如果当前是线程2,则 调用 condition2. await() 阻塞 线程2,然后调用 condition3.signal() 唤醒 线程3 如果当前是线程3,则 调用 condition3.await() 阻塞 线程3,然后调用 condition1 condition2.signal() 唤醒 线程2 lock.lock();//创建锁 try { //1.判断当前不为线程1,则阻塞线程

    35820编辑于 2022-03-23
  • 工作线程(耗时操作)与UI线程实现异步更新

    工作线程(耗时操作)与UI线程实现异步更新 概述:工作线程A(多任务)执行期间,把单一任务的结果返回到UI线程更新。 实现: 创建基础流程类(两个handler) public abstract class BaseQueueThread { /** * 设置处理线程ui处理流程,由子类实现 protected abstract Object doInWork(int integer);//耗时操作 protected abstract void doInUi(Object obj);//更新ui ;i++) { easyQueueThread.sendMessage(i,i); } } } 3.总结:耗时操作不要放在UI 线程,关键点要处理好什么时候执行工作线程,什么时候执行UI线程

    17700编辑于 2025-07-18
领券