Display类的syncExec()和asyncExec()之间的区别

我正在开发一个插件项目,我正在使用Eclipse后台处理 syncExec()类的asyncExec()Display方法之间有什么区别?它们适用于哪些情况?任何例子都可能有所帮助。

答案 0 :(得分:16)

  要允许后台线程对属于UI线程的对象执行操作,请使用Display的方法syncExec(Runnable runnable)和asyncExec(Runnable runnable)。这些是SWT中可以从任何线程调用的唯一方

法。它们允许UI线程执行runnable,同步,导致后台线程等待runnable完成,或者异步允许后台线程继续执行而不等待结果。使用syncExec()执行的runnable最接近匹配对UI操作的等效

直接调用,因为Java方法调用总是在继续之前等待结果,就像syncExec()一样。

答案 1 :(得分:7)

添加到Tom Seidel的答案中,以下是您可能想要使用其中一种情况的示例:

  • 如果您想在UI中更新某些内容而不关心结果,请使用asyncExec。例如,更新标签或进度条。

  • 使用syncExec,其中该方法调用之后的代码需要确保UI处于一致状态,或者需要来自UI的一些数据。例如,从用户对话框中获取一些数据。或者您更新窗口小部件,然后在执行任何其他操作(例如,另一个UI更新)之前,您希望知道窗口小部件更新已完成。

答案 2 :(得分:1)

SWT实现单线程UI模型。在此模型中,只有UI线程可以调用UI操作。如果您尝试从UI线程外部访问

SWT对象,则会出现异常“org.eclipse.swt.SWTException:无效的线程访问”。因此,为了允许其他线

程对属于UI线程的对象执行操作,SWT提供了syncExec和asyncExec方法。

 

转自:eclipse-rcp - Display类的syncExec()和asyncExec()之间的区别 - Thinbug

posted @ 2022-02-22 08:15  信铁寒胜  阅读(205)  评论(0编辑  收藏  举报