ProgressMonitorDialog и взаимодействие с пользователем
Я использую ProgressMonitorDialog
с IRunnableWithProgress
читать файл в фоновом режиме.
Если во время обработки этого файла возникает ошибка (данные не соответствуют ожиданиям), я хотел бы спросить пользователя, хочет ли он перейти к следующей строке.
Проблема в том, что теперь, чтобы спросить пользователя, хочет ли он продолжить, мне нужно показать диалог. Отображение диалога из не-пользовательского интерфейса предполагает использование Display.asyncExec()
или же Display.syncExec()
, Чтобы вернуть результат (пользовательское решение) в фоновый поток, я должен был бы использовать обратный вызов.
Теперь проблема в том, что когда я получаю результат в обратном вызове в фоновом потоке, как я могу продолжить чтение файла? Или, другими словами, как я могу приостановить выполнение фонового потока, пока не вернется обратная связь, а затем продолжить ее?
Я открыт для предложений и готов реструктурировать свое окружение, чтобы приспособиться к такому поведению.
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
)