首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏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属于本线程资源不能跨线程使用

    70610发布于 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, () => {

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

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

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

    87020编辑于 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线程是其高效运行的核心组成部分。

    56210编辑于 2025-01-28
  • 来自专栏王小二的Android站

    线程能否操作UI控件

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

    99310发布于 2020-06-08
  • 来自专栏林德熙的博客

    WPF 跨线程 UI 的方法

    本文告诉大家如何在 WPF 使用多线程UI 的方法 在很多的时候都是使用单线程UI 但是有时候需要做到一个线程完全处理一个耗时的界面就需要将这个线程作为另一个 UI 线程 在 WPF 可以使用 VisualTarget 做到多个 UI 线程的绘制,注意这里的 WPF 的渲染线程只有一个,多个 UI 线程无法让渲染的速度加快。 如果一个界面有很多的 Visual 那么渲染速度也不会因为添加 UI 线程用的时间比原来少 在 WPF 的 VisualTarget 可以用来连接多个不同的线程UI 元素,在使用的时候只需要创建,然后在另一个 UI 线程将创建的元素添加到 RootVisual 就可以 var thread = new Thread(() => { UI 线程,创建一个 UI 线程的最简单方法是运行 Dispatcher.Run() 和设置线程 STA 才可以,注意这里的 Dispatcher 是静态类 var thread

    2.1K30发布于 2019-03-13
  • 来自专栏移动开发面面观

    Android NDK中的UI线程

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

    3K40发布于 2018-10-29
  • 来自专栏性能与架构

    浏览器的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线程空闲后再次从队列中取出任务来执行 ?

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

    线程与更新UI,细谈原理

    进入正题,大家应该都听过这样一句话——“UI更新要在主线程,子线程更新UI会崩溃”。久而久之就感觉这是个真理,甚至被认为是“官方结论”。 但是如果问你,官方什么时候在哪里说过这句话,你会不会有点懵。 废话有点多了,今天还是通过实践案例,看看这个关于线程UI更新的 “官方结论” 正确吗? 检查线程,其实就是检查更新UI操作的当前线程是不是当初创建UI的那个线程,这样就保证了线程安全,因为UI控件本身不是线程安全的,但是加锁又显得太重,会降低View加载效率,毕竟是跟交互相关的。 总结 任何线程都可以更新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
  • 来自专栏静晴轩

    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
  • 工作线程(耗时操作)与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线程

    16900编辑于 2025-07-18
  • 来自专栏10km的专栏

    java:ObservableObserver模式在SWT环境下UI线程UI线程的透明化调用

    但是我们知道大部分UI框架(比如SWT)都要区分UI线程和非UI线程,如果Observable对象在非UI线程执行notifyObservers操作,而Observer的update方法又涉及UI对象的操作时就会抛出异常 (参见 《SWT的UI线程和非UI线程》) 如果Observer的代码不用关心自己是不是在UI线程,就可以降低Observer代码的复杂度,所以为解决这个问题,我对Observable做了进一步封装。 线程/非UI线程的透明化调用 * @author guyadong * */ public class SWTObservable extends Observable { /** * {@link Observer}在SWT环境下的重新封装
    * 实现UI/非UI线程透明化 * @author guyadong * */ class 线程和非UI线程》http://blog.csdn.net/dollyn/article/details/38582743

    73210发布于 2019-05-25
  • 来自专栏sofu456

    WPF中UI元素跨线程访问

    C#中跨线程访问UI dotnet中线程资源独占UI元素,不能跨线程访问,可以通过Dispatcher.Invoke的方式调用,但实际处理还是UI线程中,任务量比较大的数据会增加线程的处理压力 其实还有一种做法,可以通过设置UI元素为只读的方式,跨线程访问。 如BitmapSource跨线程访问,可以调用Freeze设置元素为只读模式。 Aforge.net跨线程传递图像资源,如下: private void Cam_NewFrame(object sender, AForge.Video.NewFrameEventArgs eventArgs

    1.5K20发布于 2019-07-09
  • 来自专栏京东技术

    详解Android UI线程卡顿收集

    1.2卡顿因素 导致卡顿的因素有很多,常见有: UI线程中的耗时操作 复杂、不合理的布局以及过度绘制 内存使用异常导致频繁GC 错误的异步实现 以上四条中,最主要的卡顿原因为UI线程中执行耗时操作。 我们也一直在研究,在不影响京东App性能的前提下,完美的实现一个UI线程卡顿监控系统。该系统能够监控线上用户的卡顿,上报卡顿数据,数据聚合,根据聚合结果自动生成工单,将工单发给对应模块的负责人。 2、主线程卡顿收集SDK实现 2.1 监控原理 1.主线程只有一个looper Looper.java的源码可以看到,定义了一个静态变量sMainLooper,主线程无论有多少个Handler,但只有这一个 如果endTime-startTime > 卡顿阈值,则认为该条消息执行过长,主线程卡顿。 4.采样 在执行主线程的同时,采样线程要对主线程的堆栈、cpu等信息进行周期采样。 主线程:发生卡顿后需要从采样线程的对象池中将属于T2-T1时间段的堆栈等采样信息保存起来,将数据传递给缓存池。

    2.2K60发布于 2018-04-10
  • 来自专栏everhad

    小知识 安卓线程ui

    线程环境下的ui修改   开发过程中,经常需要开启新的线程,并且在其它线程中改变ui线程ui对象的状态。 Android设计出于性能考虑,ui对象为非线程安全的,然后让ui对象仅能在主线程——也就是ui线程中被修改,以此来保证ui对象的线程安全。以下引出一些跨线程修改ui对象的情形,以及可能的实现方式。 定时更新ui 一些类似定时更新ui的代码,如动画控制。 1.1 多线程定时更改ui 具体就是新启动(不让ui线程sleep而卡住)一个线程去计时,之后定时来通知ui修改。 出于性能考虑,安卓的ui控件不是线程安全的,然后谷歌设计只让ui线程(主线程)能够直接修改ui控件,其它非ui线程不能来达到ui线程安全。 而handler用于不同线程之间的消息传递,可以让线程T1在希望的时刻去通知T2执行某些特定操作。这当然也完全能满足[非ui线程定时通知ui线程更改ui控件状态] 的目的。

    1.5K100发布于 2018-01-05
  • 来自专栏黄腾霄的博客

    2019-1-29-多线程UI的多线程问题

    我们都知道我们都知道WPF是一个单UI线程的应用模型 ---- 但是实际上我们可以通过在后台线程跑一个Dispatcher来运行UI元素 详情可以参见这个大大的博客Launching a WPF Window 整个方法中只有一个foreach循环,那么显然这是一个多线程问题 ? _themeHelper作为一个backing field只有一处赋值,而且ThemeKnownTypeHelpers属性不是线程安全的,所以应该是存在2种可能性: 1、循环的时候其他线程对该属性赋值 2、2个线程同时访问ThemeKnownTypeHelpers属性 我们跟踪下代码Application.LoadComponent调用了静态方法XamlReader.LoadBaml 这个方法中创建了 这是一个线程安全的Lazy构造的WpfSharedBamlSchemaContext。 所以所有线程都会访问同一个WpfSharedBamlSchemaContext ? ? ?

    1K30发布于 2020-06-10
  • 来自专栏walterlv - 吕毅的博客

    WPF 多线程 UI:设计一个异步加载 UI 的容器

    WPF 多线程 UI:设计一个异步加载 UI 的容器 2018-09-08 12:53 对于 WPF 程序,如果你有某一个 UI 控件非常复杂 UI 的卡住不同于 IO 操作或者密集的 CPU 计算,WPF 中的 UI 卡顿时,我们几乎没有可以让 UI 响应的方式,因为 WPF 一个窗口只有一个 UI 线程。 No! WPF 一个窗口可以不止一个 UI 线程,本文将设计一个异步加载 UI 的容器,可以在主线程完全卡死的情况下显示一个加载动画。 本文是对我另一篇博客 WPF 同一窗口内的多线程 UI(VisualTarget) 的一项应用。 由于这个控件会在后台线程创建并执行,为了避免意外的线程问题,这里传入类型,而不是实例。 LongTimeView 是一个用来模拟耗时 UI 的模拟控件。

    4.6K10发布于 2018-09-18
领券