Display.asyncExec vs Display.timerExec

时间:2012-03-08 18:33:01

标签: swt

我希望Display.timerExec(int,Runnable)Display.asyncExec(Runnable)大致相同,但具有指定的延迟。但是,似乎Display.timerExec只能在GUI线程上执行,因为它的第一行是对checkDevice()的调用。如果您没有在GUI线程中运行,则会引发异常。

任何人都可以提出使用Display.asyncExec()的方法,但执行前有延迟吗?

1 个答案:

答案 0 :(得分:6)

您可以先使用asyncExec切换到GUI线程,然后使用timerExec安排计时器操作。这两种方法的相似之处在于它们都执行某些操作,但asyncExec仅切换线程,timeExec仅调度GUI线程的操作。

display.asyncExec(() -> display.timerExec(100, () -> doThings()));

这使用lambda表达式,在Java 8中引入。

使用Java 7或更早版本,必须使用以下匿名类来编写它:

display.asyncExec(new Runnable() {
    public void run() {
        display.timerExec(100, new Runnable() {
            public void run() {
                doThings();
            }
        });
    }
});