Eclipse rcp 显示类的syncExec()和asyncExec()之间的差异

Eclipse rcp 显示类的syncExec()和asyncExec()之间的差异,eclipse-rcp,Eclipse Rcp,我正在开发一个插件项目,其中我正在使用Eclipse后台处理。 这门课的方法和步骤有什么区别?它们适用于哪些情况?任何例子都有帮助。来自 为了允许后台线程对属于UI线程的对象执行操作,使用Display的syncExec(Runnable-Runnable)和asynceec(Runnable-Runnable)方法。这些是SWT中唯一可以从任何线程调用的方法。它们允许UI线程同步执行runnable,导致后台线程等待runnable完成,或者异步允许后台线程继续执行而不等待结果。使用syncE

我正在开发一个插件项目,其中我正在使用Eclipse后台处理。
这门课的方法和步骤有什么区别?它们适用于哪些情况?任何例子都有帮助。

来自

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


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

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

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


    • SWT实现单线程UI模型。在这个模型中,只有UI线程可以调用UI操作。如果尝试从UI线程外部访问SWT对象,则会出现异常“org.eclipse.SWT.SWT异常:无效线程访问”。因此,为了允许其他线程对属于UI线程的对象执行操作,SWT提供了syncExec和asyncExec方法

      这可能有助于你举个例子