在Swing
中,我创建了SwingWorkers
或使用invokeLater
在不扰动Swings GUI线程的情况下进行时间密集型计算。 SWT中如何做到这一点?我正在写使用可赎回和将来的代码,但我不认为这会削减它:时间密集型计算和SWT
class MyClass extends ViewPart {
.
.
.
@Override
public void createPartControl(final Composite arg0) {
this.runScenarioItem.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(final SelectionEvent e) {
final ScenarioDialog scenarioDialog = new ScenarioDialog(arg0.getShell(), SWT.DIALOG_TRIM
| SWT.APPLICATION_MODAL);
final Scenario scenario = scenarioDialog.open();
if (suvConnection.isConnected()) {
runScenarioItem.setEnabled(false);
try {
final ScenarioRunner runner = new ScenarioRunner(suvConnection, scenario);
final ExecutorService executor = new ScheduledThreadPoolExecutor(1);
final Future<Integer> future = executor.submit(runner);
System.out.println("result of callable = " + future.get());
runScenarioItem.setEnabled(true);
}
catch (final Exception e1) {
e1.printStackTrace();
}
}
}
});
}
}
编辑:
我想下面的代码片段添加到我的密集型计算类:
final Display display = this.shell.getDisplay();
display.asyncExec(new Runnable() {
public void run() {
if (!display.isDisposed()) {
display.readAndDispatch();
}
}
});
我会在有更多信息时更新。我想念秋千的男人...
谢谢汤姆。对不起,没有帮助的咆哮:) – 2012-03-20 17:34:27
请将相关部分复制到您的答案,因为网络上的所有网站来去。 – Shiki 2014-01-17 10:46:44