invokeLater/invokeAndWait 和 asyncExec/syncExec 之间的区别

Difference between invokeLater/invokeAndWait and asyncExec/syncExec

我正在使用 Eclipse RCP 和 Swing 开发一个项目。我看到有两对方法 invokeLater()/invokeAndWait()asyncExec()/syncExec() 被大量使用。

据我了解,invokeLater()/invokeAndWait()属于Swing,asyncExec()/syncExec()属于Eclipse。但是这两对方法有什么区别呢?

如果它们都用于在 UI 线程上执行任务,那么它们 post 任务所在的是同一个 UI 线程吗? invokeLater()asyncExec() 可以互换吗?

如果我打电话,是否有任何潜在的陷阱(例如死锁等) syncExec() 来自 invokeAndWait()?

Eclipse 使用 SWT 用户界面,这是一个完全独立于 Swing 的 UI 系统。 asyncExec()/syncExec() 是 SWT 系统的一部分。

如果您正在为 Eclipse 编写 Eclipse RCP 或插件,您应该编写 SWT 代码。

SWT 确实提供了一种使用 Swing 代码的方法,但这应该是最后的手段。

由于它们是完全不同的 UI 系统,每个系统都有自己的事件循环 invokeAndWaitsyncExec 不可互换。当有两个UI事件循环运行.

时,很容易陷入混乱