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

srk*_*srk 13 eclipse-rcp

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

Tom*_*del 17

来自Q:为什么我得到错误"org.eclipse.swt.SWTException:无效的线程访问"?

要允许后台线程对属于UI线程的对象执行操作,请使用Display的方法syncExec(Runnable runnable)和asyncExec(Runnable runnable).这些是SWT中可以从任何线程调用的唯一方法.它们允许UI线程执行runnable,同步,导致后台线程等待runnable完成,或者异步允许后台线程继续执行而不等待结果.使用syncExec()执行的runnable最接近匹配对UI操作的等效直接调用,因为Java方法调用总是在继续之前等待结果,就像syncExec()一样.


jhy*_*yot 7

除了Tom Seidel的答案之外,以下是您可能想要使用其中一种情况的示例:

  • 使用asyncExec时,你想不关心结果来更新UI的东西.例如,更新标签或进度条.

  • 使用syncExec其中下面这个方法调用的代码需要确保用户界面是一致的状态,或者从UI需要一些数据.例如,从用户对话框中获取一些数据.或者您更新窗口小部件并在执行任何其他操作(例如,另一个UI更新)之前,您想知道窗口小部件更新已完成.