2014-09-29 2 views
0

Я использую ProgressMonitorDialog с IRunnableWithProgress, чтобы прочитать файл в фоновом режиме.ProgressMonitorDialog и взаимодействие с пользователем

Если во время обработки этого файла произошла ошибка (данные не соответствуют тем, что я ожидаю), я хотел бы попросить пользователя, если он/она хочет продолжить следующую строку.

Проблема в том, что, чтобы спросить пользователя, хотят ли они продолжить, мне нужно будет открыть диалог. Отображение диалога из потока, отличного от UI, включает использование 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)

+0

Позвольте мне дать, что попробовать и получить обратно к вам. – Baz

+0

Да, это сработало просто отлично. Спасибо, greg. Он слишком долго смотрел на нее, чтобы увидеть это. – Baz

Смежные вопросы