我使用ProgressMonitorDialog
和IRunnableWithProgress
在后台阅读文件。
如果在此文件处理期间发生错误(数据不是我期待的),我想询问用户他/她是否想要继续下一行。
现在的问题是,为了询问用户是否要继续,我必须显示一个对话框。显示来自非UI线程的对话框涉及使用Display.asyncExec()
或Display.syncExec()
。为了将结果(用户决定)返回给后台线程,我必须使用回调。
现在问题是,当我在后台线程的回调中得到结果时,如何继续读取文件?或者,换句话说,如何暂停执行后台线程,直到反馈返回然后继续它?
我愿意接受建议并愿意重组我的环境以适应这种行为。
答案 0 :(得分: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
中的代码)