Eclipse RCP:Display.getDefault()。asyncExec仍然阻止我的GUI

时间:2011-10-21 09:48:31

标签: user-interface rcp

我有一个简单的viewPart提供一些文本字段来输入selenium测试的参数。在填写这些字段之后,用户可以开始大约的测试。需要30-45分钟才能运行。我希望我的GUI在此测试期间保持活跃状态​​,让用户有机会做其他事情。我需要一个进度监视器。

我尝试将selenium测试放在包含Display.getDefault()。asyncExec的作业中以运行它。但是我的GUI在几秒钟之后冻结给了busyindicator。 selenium不会更新任何其他视图,而是更新进度监视器。

还有另一种方法可以确保作业不会阻止我的GUI吗?

最佳, 的Mirco

2 个答案:

答案 0 :(得分:7)

(a)syncExec中执行的所有操作都使用显示线程,因此阻止UI返回。我建议你使用Eclipse Jobs。这将使用工作台已经开箱即用的进度指示器。

答案 1 :(得分:0)

我建议将代码拆分为更新UI的代码和执行其他业务的代码。在单独的线程中执行所有操作,当您需要检索或设置某些操作到UI时,请使用“Display.getDefault()。asyncExec”。

Thread thread = new Thread("Testing") {

    // some shared members

    public void run() {

        someBusiness();

        // or use syncExec if you need your thread
        // to wait for the action to finish
        Display.getDefault().asyncExec(new Runnable() {

            @Override
            public void run() {
                // UI stuff here
                // data retrieval
                // values setting
                // actions trigging 
                // but no business
            }

        });
        someBusiness();

};
thread.start();