Как показать диалог прогресса с Gtk # при загрузке данных? - PullRequest
0 голосов
/ 24 июня 2010

У меня есть главное окно с кнопкой «открыть файл». При нажатии появляется диалоговое окно выбора файла, а затем файл загружается. Я хотел бы показать диалог прогресса при загрузке данных. Однако, когда я звоню Run

dlg.Run();
load_data(); // not executed

выполнение останавливается там (я должен закрыть диалоговое окно для загрузки данных), если я вызываю Show

dlg.Show();
load_data();

загрузка завершена, но диалоговое окно не отображается.

Итак, как показать модальное окно, диалог прогресса и тем временем загрузить данные?

Примечание: этот вопрос только об отображении диалогового окна хода выполнения, а НЕ об обновлении виджета индикатора выполнения.

Ответы [ 2 ]

2 голосов
/ 29 июня 2010

Если вы просто хотите показать пользовательский интерфейс и затем загрузить данные, не обрабатывая события, то сработает следующее:

while (Gtk.Application.EventsPending ())
    Gtk.Application.RunIteration ();

Вы можете поместить это в метод "FlushEvents" и затем вызватьчто после того, как вы откроете диалоговое окно, и вы также можете запускать его время от времени при загрузке данных, чтобы пользователь мог нажать на кнопку отмены.

На практике вы можете захотеть использовать поток или события pushили прогрессивно загружать в обработчик простоя.См. Этот документ для получения дополнительной информации:

http://www.mono -project.com / Multi-threadaded_GtkSharp_Programing_and_Keeping_your_Application_Responsive

0 голосов
/ 28 июня 2010

Хорошо, я спросил в группе новостей gtk # mono, и благодаря Крису Хоуи мне наконец удалось выполнить задачу.

Короче говоря - потому что, возможно, кто-то тоже впадет в это:

  • вы создаете диалог
  • вы создаете задачу
  • во вновь созданной задаче вы показываете диалоговое окно, выполняете вычисления (и обновляете диалоговое окно) и уничтожаете диалоговое окно

Поскольку диалоговое окно является модальным, вам даже не нужно беспокоиться о том, чтобы дождаться завершения задачи - это уже сделано Gtk #.

...