当GUI启动的时候, 后台会运行几个线程? 比如
1. SWT 从Main函数启动
2. Swing 从Main函数启动
3. Android 界面启动
常常我们被告知, 主线程, UI线程, 因此这里很多会回答, 有两个线程, 一个线程是Main, 另外一个是UI. 如果答案是这样, 这篇文章就是写给你的.
本文由如下结论:
UI线程和主线程,普通线程的关系
1. UI线程和Main线程没有必然联系, 从Main函数启动, 也可以从一个其它的线程启动. 启动UI的线程, 则为UI线程
2. 不允许出现两个UI线程. 如果第一个线程启动了UI. 则第一个线程则成为UI线程. 如果第二个线程涉及UI操作, 则需要保证这个操作放在UI线程中. 否则会出现Invalid thread access错误.
SWT为什么会有Display.asyncExec(new Runnable())操作:
1. 当界面执行了长时段的UI操作, 比如进度条, 此时如果把更新UI的操作放在唯一的UI线程中执行, 那么本线程将全部消耗CPU资源, 造成界面无法拖动.拖动则界面死掉MethodA()。
2. 为了解决问题1, 我们一般另外启动一个线程进行操作, 这样使得界面可以拖动, 但是UI的操作无法在其它的线程中完成, 只能在UI线程中完成,
3. Display.asyncExec(new Runnable()的目的就是将这个动作放在UI线程中完成. 这样避免报错Invalid thread access
分享到:
相关推荐
在计算机编程中,尤其是开发图形用户界面(GUI)应用程序时,UI线程(用户界面线程)和工作线程的概念至关重要。UI线程是应用程序的主要线程,负责处理与用户交互相关的所有事件,如鼠标点击、键盘输入以及窗口的...
在软件开发中,UI线程(用户界面线程)通常负责处理用户交互和更新界面,而后台线程则用于执行耗时的操作,如计算或网络通信,以避免阻塞UI,确保用户界面的流畅性。"无界面的UI线程交互"这个主题探讨的是在没有直接...
本篇文章将深入探讨"MFC UI线程的使用",包括CWinThread类的运用、UI线程间的消息传递机制,以及如何利用ON_THREAD_MESSAGE宏和PostThreadMessage函数来实现线程间的通信。 首先,我们来看MFC中的CWinThread类。...
MFC创建UI线程是应用程序设计中的一个重要环节,尤其对于那些需要处理用户界面更新和响应用户交互的复杂应用。线程允许应用程序同时执行多个任务,提高性能和用户体验。下面我们将深入探讨如何在MFC中创建UI线程以及...
在Android开发中,UI线程(主线程)主要负责用户界面的绘制与交互,因此它必须保持流畅,避免被耗时操作阻塞。为了解决这个问题,Android提供了多种异步处理机制,其中一种常见的方式是使用`Thread`配合`Handler`来...
标题提到的“Android-dialog库”是Android开发中的一个第三方库,它提供了一种灵活的方式,使得开发者能够在任意类中方便地调用Dialog,并且支持在子线程或UI线程内显示,这极大地提高了代码的可复用性和执行效率。...
因为Android系统规定所有与UI相关的操作必须在UI线程中执行,所以保证其流畅运行是提升用户体验的关键。 而工作线程,顾名思义,是用来执行耗时任务的。这些任务可能包括网络请求、数据库操作、大量计算等。使用...
### Android异步处理详解:使用Thread+Handler实现非UI线程更新UI界面 #### 概述 Android系统中,每一个应用程序都运行在一个独立的Dalvik虚拟机进程中。当应用程序启动时,系统会创建一个主线程(MainThread),也...
【OkHttp简单封装,支持进度UI线程回调】 在Android应用开发中,网络请求是必不可少的部分,而OkHttp作为一款高效的网络库,被广泛应用。本项目"OkHttpDemo"对OkHttp进行了简单的封装,旨在简化网络操作,同时提供...
由于.NET Framework的安全机制,直接在非UI线程修改UI组件可能会导致线程不安全的问题,因此需要正确地进行线程间通信。本文将详细探讨如何在WinForm应用中实现在后台线程与UI线程之间的通信,并确保UI更新的安全。 ...
C# 跨线程访问UI线程控件 在C#中,由于使用线程和调用UI的线程属于两个不同的线程,如果在线程中直接设置UI元素的属性,此时就会出现跨线程错误。 下面介绍两种解决方案 第一种:使用控件自带的Invoke或者...
这种设计模式虽然简单,但当UI线程被长时间运行的任务阻塞时,就会出现标题中提到的问题:界面卡顿、控件响应慢,甚至整个界面假死。为了解决这个问题,开发者需要理解和掌握多UI线程的概念和技术。 多UI线程允许...
它们通常用于执行计算密集型任务或长时间运行的任务,以免阻塞UI线程。 8. **线程的挂起和恢复**: - `SuspendThread`函数可挂起一个线程,暂停其执行,而`ResumeThread`函数恢复已挂起线程的执行。 9. **线程的...
Thread 达到跨线程更新UI 虽然使用Dispatcher.Invoke 和模拟winform 里面的DoEvent 但是运行中关闭还是会有异常,而且耗资源高; 第二种 : DispatcherTimer 失败:UI还是会卡顿; 第三种 : Timer 建议使用、资源...
在Android应用开发中,UI线程(也称为主线程)负责处理用户交互和绘制界面,而子线程通常用于执行耗时操作,如网络请求、数据处理等。由于Android系统的安全机制,直接在子线程中修改UI是不允许的,因此我们需要通过...
在Android系统中,UI线程(也称为主线程)是应用程序与用户交互的主要通道,它负责处理所有的用户界面更新和事件响应。理解Android的UI线程机制至关重要,因为错误地在非UI线程中操作UI组件会导致应用崩溃或出现不...