0

我正在使用 aProgressMonitorDialogIRunnableWithProgress后台读取文件。

如果在此文件处理过程中发生错误(数据不是我所期望的),我想询问用户是否要继续下一行。

现在的问题是,为了询问用户是否要继续,我必须显示一个对话框。显示来自非 UI 线程的对话框涉及使用Display.asyncExec()Display.syncExec()。为了将结果(用户决定)返回给后台线程,我必须使用回调。

现在,问题是,当我在后台线程的回调中得到结果时,我怎样才能继续读取文件?或者,换句话说,我怎样才能暂停后台线程的执行,直到反馈返回,然后继续它?

我愿意接受建议,并愿意重组我的环境以适应这种行为。

4

1 回答 1

1

Dislay.syncExec阻止您从中调用它的线程,以便您可以执行以下操作:

final int[] result = new int[] {0};

display.syncExec(new Runnable() {
    public void run() {
        Shell shell = display.getActiveShell();

        MessageDialog dialog = .... your message dialog

        result[0] = dialog.open();
    }
});

... dialog return code in result[0]

(大量改编自 中的代码org.eclipse.equinox.internal.p2.ui.ValidationDialogServiceUI

于 2014-09-29T13:39:48.147 回答