`

其他线程访问UI线程

    博客分类:
  • SWT
阅读更多
final ProgressBar pb = new ProgressBar(shell, SWT.NONE);
		pb.setBounds(68, 153, 365, 17);
		final int minnimum = pb.getMinimum();
		final int maximum = pb.getMaximum();
		Runnable r = new Runnable() {
		
			//线程运行的主体
			@Override
			public void run() {
				for(int i=minnimum;i<maximum;i++){
					try {
						//让线程睡眠0.1秒
						Thread.sleep(100);
					} catch (Exception e) {
						e.printStackTrace();
					}
//					pb.setSelection(pb.getSelection()+1); org.eclipse.swt.SWTException: Invalid thread access
					
					//让UI线程更新滚动条的值
					Display.getDefault().asyncExec(new Runnable() {
						
						//这也是一个线程,该线程的功能是更新滚动条的值,一瞬间就结束了
						//并且这个线程是被UI线程调用的
						@Override
						public void run() {
							if(pb.isDisposed())
								return;
								pb.setSelection(pb.getSelection()+1);
						}
					});
				}
			}
		
		};
		new Thread(r).start();
		
		//ps: 在设置滚动条的 progressBar 值时,为什么不能直接使用 pb.setSelection(pb.getSelection() + 1) 代码来直接设置滚动条的值呢?这时因为
		//滚动条对象是UI界面上的控件,它是由UI线程创建的.若要访问UI界面上的对象必须通过UI线程来访问,就是说在非UI线程中调用UI对象是不允许的,这时出于线程安全的考虑.
		//正因为如此,只能通过另一种方式来更新进度条的值,解决方案就是需要再开辟一个线程,专门更新滚动条的值,这个线程交给UI线程来调用.

 

分享到:
评论

相关推荐

    C# 跨线程访问UI线程控件

    C# 跨线程访问UI线程控件 在C#中,由于使用线程和调用UI的线程属于两个不同的线程,如果在线程中直接设置UI元素的属性,此时就会出现跨线程错误。    下面介绍两种解决方案  第一种:使用控件自带的Invoke或者...

    C# 线程访问UI 代理Invoke技术 标准实现

    C# 线程访问UI 使用代理和 Invoke方法,保证在UI线程中访问UI,实现了线程UI访问安全性。 ---简单实用

    用多线程更新UI

    一个用多线程在UI线程内安全更新UI界面控件来避免UI访问冲突的程序

    安卓UI线程机制 ,在子线程中访问UI

    安卓UI线程机制 ,在子线程中访问UI

    Winform中如何跨线程访问UI元素

    在C# 的应用程序开发中, 我们经常要把UI线程和工作线程分开,防止界面停止响应, 同时我们又需要在工作线程中更新UI界面上的控件。但直接访问会出现“线程间操作无效”的情况,因为.NET禁止了跨线程调用控件, 否则...

    跨类跨线程访问C#源代码

    在C#中,跨类跨线程访问UI线程控件是一个常见的需求。以下是几种常用的方法: 委托(Delegate):委托是一种类型,它代表一个方法,可以用来将方法作为参数传递给其他方法。 Invoke和BeginInvoke方法:在Windows ...

    使用线程访问网页内容并在主UI显示.rar

    代码在AS3.5.3环境下测试,采用最标准的线程使用方法,读取服务器的一个文本,简单实用。网上很多代码在AS3.5测试都通不过,网页读取内容简单,没有解析,只是简单的处理。网页读取采用单独的类。android9.0测试通过

    浅谈C#跨线程调用窗体控件(比如TextBox)引发的线程安全问题

    下面小编就为大家分享一篇浅谈C#跨线程调用窗体控件(比如TextBox)引发的线程安全问题,具有很好的参考价值,希望对大家有所帮助

    android 源码

    这段代码为什么不报错(android 其他线程访问UI线程对象问题)

    C#线程通信

    子线程访问UI线程控件的方法 MethodInvoker Invoke

    c#跨线程访问控件程序集

    通过反射技术,将异步加载的数据,安全的跨线程会显到UI界面.使用简单

    python GUI库图形界面开发之PyQt5 UI主线程与耗时线程分离详细方法实例

    在做界面开发时,无论是移动端的Android,还是我们这里讲的PyQt5,经常会有一个界面开发准则,那就是UI主线程与耗时子线程一定要分开,主线程负责刷新界面,耗时操作,如网络交互、磁盘IO等,都应该放在子线程里执行...

    c#子线程如何读取及设置主线程ui的值

    c#子线程如何读取及设置主线程ui的值,自己录的一个小视频,方便理解,比较菜鸟的方法,请勿喷!

    VB.Net-C#多线程Thread-代理委托delegate编程

    C#多线程窗体控件安全访问.txt C#多线程使用TextBox控件 .txt C#多线程注意点.txt Control的Invoke和BeginInvoke.txt Invoke和BeginInvoke的真正含义.txt NET异步调用模式.txt TreeView更新线程.txt url.txt VB.NET...

    Python+PyQT5的子线程更新UI界面的实例

    所以Android中规定只能在UI线程中访问UI,相当于从另一个角度给Android的UI访问加上锁,一个伪锁。 在PyQT5中使用QThread from PyQt5.QtWidgets import QMainWindow, QPushButton, QApplication from PyQt5.QtWid

    Eclipse_Swt_Jface_核心应用_部分19

    11.3 其他线程访问UI线程 234 11.4 改进的进度条 236 11.5 多线程程序设计 238 11.6 本章小结 243 第12章 SWT系统资源 244 12.1 系统资源概述 244 12.1.1 什么是系统资源 244 12.1.2 释放资源的原则 ...

    Handler与AsyncTask,Looper使用示例

    Handler,AsyncTask,Looper自定义线程使用示例,自定义线程与UI线程交互,访问UI线程控件

    python多线程接口案例

    项目为某内控公司要求并发测试,编写多线程访问接口,并生成Excel报告的脚本,记录基本步骤。 若有需要写UI自动化,接口自动化,多线程,服务器测试定时脚本等等,可联系本工具熊。 分五步操作实现50个或更多用户...

Global site tag (gtag.js) - Google Analytics