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的线程属于两个不同的线程,如果在线程中直接设置UI元素的属性,此时就会出现跨线程错误。 下面介绍两种解决方案 第一种:使用控件自带的Invoke或者...
C# 线程访问UI 使用代理和 Invoke方法,保证在UI线程中访问UI,实现了线程UI访问安全性。 ---简单实用
一个用多线程在UI线程内安全更新UI界面控件来避免UI访问冲突的程序
安卓UI线程机制 ,在子线程中访问UI
在C# 的应用程序开发中, 我们经常要把UI线程和工作线程分开,防止界面停止响应, 同时我们又需要在工作线程中更新UI界面上的控件。但直接访问会出现“线程间操作无效”的情况,因为.NET禁止了跨线程调用控件, 否则...
在C#中,跨类跨线程访问UI线程控件是一个常见的需求。以下是几种常用的方法: 委托(Delegate):委托是一种类型,它代表一个方法,可以用来将方法作为参数传递给其他方法。 Invoke和BeginInvoke方法:在Windows ...
代码在AS3.5.3环境下测试,采用最标准的线程使用方法,读取服务器的一个文本,简单实用。网上很多代码在AS3.5测试都通不过,网页读取内容简单,没有解析,只是简单的处理。网页读取采用单独的类。android9.0测试通过
下面小编就为大家分享一篇浅谈C#跨线程调用窗体控件(比如TextBox)引发的线程安全问题,具有很好的参考价值,希望对大家有所帮助
这段代码为什么不报错(android 其他线程访问UI线程对象问题)
子线程访问UI线程控件的方法 MethodInvoker Invoke
通过反射技术,将异步加载的数据,安全的跨线程会显到UI界面.使用简单
在做界面开发时,无论是移动端的Android,还是我们这里讲的PyQt5,经常会有一个界面开发准则,那就是UI主线程与耗时子线程一定要分开,主线程负责刷新界面,耗时操作,如网络交互、磁盘IO等,都应该放在子线程里执行...
c#子线程如何读取及设置主线程ui的值,自己录的一个小视频,方便理解,比较菜鸟的方法,请勿喷!
C#多线程窗体控件安全访问.txt C#多线程使用TextBox控件 .txt C#多线程注意点.txt Control的Invoke和BeginInvoke.txt Invoke和BeginInvoke的真正含义.txt NET异步调用模式.txt TreeView更新线程.txt url.txt VB.NET...
所以Android中规定只能在UI线程中访问UI,相当于从另一个角度给Android的UI访问加上锁,一个伪锁。 在PyQT5中使用QThread from PyQt5.QtWidgets import QMainWindow, QPushButton, QApplication from PyQt5.QtWid
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自定义线程使用示例,自定义线程与UI线程交互,访问UI线程控件
项目为某内控公司要求并发测试,编写多线程访问接口,并生成Excel报告的脚本,记录基本步骤。 若有需要写UI自动化,接口自动化,多线程,服务器测试定时脚本等等,可联系本工具熊。 分五步操作实现50个或更多用户...