首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

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

50110
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    在Silverlight中动态绑定页面报表(PageReport)的数据源

    这种报表模型非常适合于在同一个报表中显示多个数据集数据的需求,而且不必精细的控制数据在页面中的显示位置。连续页面布局报表还允许用户通过折叠/ 展开的方式来隐藏/显示报表内容。...下面就来看看在Silverlight平台中如果动态绑定PageReport数据源,本文中创建的报表选用的是连续页面布局模型(CPL)。...完成以上操作之后,我们在PageReport1报表中添加一个Table控件,并按照下图设置单元格的显示内容 到现在,我们完成了所有报表部分的开发工作,下面就需要给PageReport绑定数据源...GrapeCity.ActiveReports.PageReportModel.Field("Price", "Price", null); myDataSet.Fields.Add(_field); // 将数据源和数据集绑定到报表中...源码下载:在Silverlight中动态绑定页面报表(PageReport)的数据源

    1.9K90

    如何让Task在非线程池线程中执行?

    Task承载的操作需要被调度才能被执行,由于.NET默认采用基于线程池的调度器,所以Task默认在线程池线程中执行。...但是有的操作并不适合使用线程池,比如我们在一个ASP.NET Core应用中承载了一些需要长时间执行的后台操作,由于线程池被用来处理HTTP请求,如果这些后台操作也使用线程池来调度,就会造成相互影响。...,我们得到了答案:利用TaskFactory创建的Task在默认情况下确实是通过线程池的形式被调度的。...,就会通过如下的输出结果看到Do方法将不会在线程池线程中执行了。...在调用的StartNew方法中,我们调用这个DoAsync方法创建了6个Task,这些Task交给创建的DedicatedThreadTaskScheduler进行调度。

    79520

    在Android中实现service动态更新UI界面

    之前曾介绍过Android的UI设计与后台线程交互,据Android API的介绍,service一般是在后台运行的,没有界面的。那么如何实现service动态更新UI界面呢?...案例:通过service向远程服务器发送请求,根据服务器返回的结果动态更新主程序UI界面,主程序可实时关闭或重启服务。...注册BroadcastReceiver 在主程序activity中注册一个BroadcastReceiver,用于接收Service发布的广播。...return super.onStartCommand(intent, flags, startId); 9 } 实时发送 后台service在doJob()方法中连接服务器并向主程序实时发送广播。...com.szy.ui.service"); 7 intent.putExtra("data", data); 8 sendBroadcast(intent);//发送广播 至此,我们实现了主程序通过接收广播实时更新应用的

    2.6K70

    Android NDK中的UI线程

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

    2.6K40

    Winform 的一个多线程绑定DataGrid数据源的例子

    我们都知道简单的运用多线程的方法有 1/ Thread thread=new Thread(new StartThread(this.method))      thread.start(); 2/ define...    instance delegate     MethodDelegate md=new    MethodDelegate(this.method)     md.BeginInvoke(); 在winform...程序下我们经常遇到在做查询的时候,当查询数据特别多的时候就会出现界面停滞的现象,不能做任何其他事情,只能等待这个查询完成;这时我们自然想到了要运用多线程技术;来解决这个问题 我的代码结构是 dbmanager.readTable..., 有人可能会想到使用窗体的BeginInvoke来调用,后来发现这种做法是并不能做到异步调用,仍然会造成死机的现象 后来我找一个变通的方法 public  delegate DataTable QueryDelegate...; 如果大家还有更好的方法,我们一起讨论

    1.2K90

    温故而知新:WinFormSilverlight多线程编程中如何更新UI控件的值

    单线程的winfom程序中,设置一个控件的值是很easy的事情,直接 this.TextBox1.value = "Hello World!"...究其原因,winform中的UI控件不是线程安全的,如果可以随意在任何线程中改变其值,你创建一个线程,我创建一个线程,大家都来抢着更改"TextBox1"的值,没有任何秩序的话,天下大乱......(Winform/Silverlight通用) BackgroundWorker会在主线程之外,另开一个后台线程,我们可以把一些处理放在后台线程中处理,完成之后,后台线程会把结果传递给主线程,同时结束自己...,当然您也可以在这里做复杂的处理后,再返回自己想要的结果(这里的操作是在另一个线程上完成的)         } void bw_RunWorkerCompleted(object sender, ...RunWorkerCompletedEventArgs e)         { //这时后台线程已经完成,并返回了主线程,所以可以直接使用UI控件了 this.textBox1.Text = e.Result.ToString

    1.8K50

    动态代理(基于接口)的方式实现线程绑定和事务控制(非aop)

    基于接口的动态代理的方式实现线程绑定和事务控制 首先我们来看一看实现Service的两种方法 1.本身就是一个实现类 非常常规的配置 耦合性很高 线程上面是由连接的 不能用 } 二、连接的工具类 线程的绑定 为了防止一个方法执行到一半发生错误,但之前的步骤已经执行无法挽回 例如:转账 你花了钱 系统错了 钱没到别人的卡上 连接的工具类...,它用于从数据源中获取一个连接,并且实现和线程的绑定 public class ConnectionUtils { private ThreadLocal tl =...用户的持久层实现类 重点 执行sql语句的时候进行线程的绑定 重点!!!!!...在BeanFactory中实现对Service的动态代理 用于创建Service的代理对象的工厂 一般来说是 但为了实现动态代理 并且 让Service里的所有方法都经过这里面 进行了事务的控制

    50600

    主线程中也不绝对安全的 UI 操作

    从最初开始学习 iOS 的时候,我们就被告知 UI 操作一定要放在主线程进行。这是因为 UIKit 的方法不是线程安全的,保证线程安全需要极大的开销。...那么问题来了,在主线程中进行 UI 操作一定是安全的么? 显然,答案是否定的!...寻找线程的规则是:任何提交到主队列的 block 都会在主线程中执行,在不违背此规则的前提下,文档还告诉我们系统会自动进行优化,尽可能的在当前线程执行 block。...现在我们知道,即使是在主线程中执行的代码,也很可能不是运行在主队列中(反之则必然)。...更进一步的思考,有时候为了保证 UI 操作在主线程运行,如果有一个函数可以用来创建新的UILabel,为了确保线程安全,代码可能是这样: -(UILabel *)labelWithText:(NSString

    99210

    【C#】让DataGridView输入中实时更新数据源中的计算列

    理解前提:熟知DataTable、DataView 求:更好方案 考虑这样一个场景: 某DataTable(下称dt)的B列是计算列(设置了Expression属性),是根据A列的数据计算而来,该dt被绑定到某个...当dgv绑定数据源后,它的每一行就对应了数据源中的一行(或叫一项),这就是我所谓的【源行】。...可以看到,计算列得到更新的关键有两处: dgv单元格的数据要提交到数据源相应单元格 源行结束编辑状态 按常规提交流程,必须使焦点离开单元格所在的行(只离开单元格都不行哦)才能达到目的,而我们的需求是,编辑的过程中就要实时更新...} } 通过这个事件做了上面要做的两个事,即①将dgv单元格值更新到数据源;②结束源行编辑状态。...也就是如果要连续输入,必须在每次输入后用鼠标或方向键取消全选并将光标定位到正确的位置~这不蛋疼吗,必须解决!首先为什么会全选的原因不明,我猜是由于数据源的更新反过来影响dgv所致。

    5.3K20

    【翻译】WPF4.5新特性(MSDN的翻译读不太懂)

    这个属性可以使UI在呈现分组数据时进行界面虚拟化。...event EventHandler StaticPropertyChanged; 在非UI线程访问集合 你可以在一个非UI线程中访问和修改UI线程中的集合数据...这样你就可以使用后台线程从UI线程中接收数据。 当你使用另一个线程修改数据集合的时候,展现在用户界面上的数据也会被相应的修改。...如果你使用数据绑定来更新数据源,那么你可以使用delay属性来指定多久之后,把数据的更改通知数据源。...其实,我们只需要在slider停止滑动的时候更新数据源就可以了。 为了避免数据源被频繁的更新,可以使用delay属性来解决这个问题(译注:这里是挺长的一句,懒得翻译了)。

    1.4K70

    localtime在多线程中的问题

    碰到一个奇怪的问题,通过localtime生成本地日期时间打日志,结果日志会出现非北京时间,好奇去查了一个,结果发现此函数是非线程安全函数,原来代码如下: int32_t utc2datetime(uint32...= (uint16_t)p->tm_sec; out_pTime->unWeek = (uint16_t)p->tm_wday; return 0; } localtime,用来获取系统时间,原型在time.h...头文件中,定义如下: struct tm *localtime(const time_t *timep); 在实际应用中,用了2个线程一个统计,一个日志使用此函数,结果就会出现读出的SVC_TIME有的是北京时间...,有的是-8小时的时间,需要使用线程安全函数,localtime_r和localtime_s,localtime_r是linux下线程安全函数,localtime_s是windows下线程安全函数,定义分别如下...struct tm *_tm ); errno_t localtime_s(struct tm* _tm,const time_t *time); 注意:localtime_r和localtime_s的参数是相反的

    50140
    领券