WinForms: ищем простой способ открыть панель «Обработка..»

У меня есть приложение WinForms, которое в какой-то момент будет выполнять некоторые вычисления, занимающие пару секунд. В это время я отключаю элементы управления. Кроме того, я хочу отобразить всплывающее окно, которое более заметно «блокирует» приложение.

Я попытался разместить панель поверх формы, чтобы сделать это, но я почему-то не могу добавить к ней текст. т.е. Ярлыки и ImageBox, которые я туда помещаю, почему-то не отображаются или находятся за панелью.

Любые предложения, как я могу добиться этого быстро и легко? .. Я имею в виду, без переделки всей формы.


person Efrain    schedule 09.08.2011    source источник
comment
Но таким образом он заблокировал бы процесс ожидания щелчка пользователя, и его вычисления не были бы выполнены...   -  person Francesco Baruchelli    schedule 09.08.2011


Ответы (3)


arrow_upward
4
arrow_downward

Ваша проблема с тем, что не отображается на вашей дополнительной панели, заключается в том, что все происходит в одном и том же потоке, но ваши вычисления блокируют появление всего, потому что они перегружают поток. Вам следует изучить возможность использования backgroundWorker, который является одним из инструментов WinForms. Вызов функции, выполняющей вычисления, следует кинуть в метод DoWork фонворкера, тогда сама форма сможет продолжать функционировать во время вычислений.

См. http://msdn.microsoft.com/en-us/library/cc221403%28v=vs.95%29.aspx для примеров

person k.schroeder31    schedule 09.08.2011

arrow_upward
1
arrow_downward

Создайте диалоговое окно (форму окна), которое будет всплывать во время обработки, затем вы можете закрыть диалоговое окно после завершения обработки.

Используя диалоговое окно, а не окно сообщений, вы по-прежнему можете контролировать закрытие окна после завершения обработки.

person Taryn    schedule 09.08.2011

arrow_upward
1
arrow_downward

Вы можете создать простой UserControl, используя только Label и ImageBox, возможно, с общедоступным сеттером для их значений. Вы можете добавить его в свою форму, установив для его свойства Visible значение false. Затем вы можете сделать его видимым во время вычислений и в конце вернуться наверх невидимым.

person Francesco Baruchelli    schedule 09.08.2011