ОК, поэтому вам не нужно модальное диалоговое окно, вам нужен механизм, чтобы ваш пользователь не мог выбирать основную форму, пока включена обработка.
Модальное диалоговое окно не означает, что выполнение остановлено - это просто происходит в другом месте.
Есть несколько способов сделать это, и вы исключили создание нового потока (не знаю почему, это решило бы это элегантно). Если не использовать поток, у вас будет другая проблема - ваша обработка должна выполняться в чанках, и каждый раз вам придется делать что-то вроде Application.DoEvents()
, чтобы ваше приложение могло обрабатывать сообщения и не зависать для пользователя. .
Итак, если вы можете создать метод в основной форме, который отображает диалоговое окно «Пожалуйста, подождите», которое выполнит некоторую работу, а затем сделает еще несколько, пока не закончится, вы можете сделать это:
- создать новую форму (диалоговое окно ожидания)
- запустить таймер внутри него и подключить таймер к форме РОДИТЕЛЯ
- интервал таймера должен быть 1
ShowDialog()
форма
- при событии таймера выполняйте небольшой объем работы (не позволяйте, чтобы оно продолжалось более 1/10 секунды)
Вы можете сделать это?
В любом случае:
- задача не может быть разбита на маленькие работоспособные части
- вы не можете использовать темы
- вы хотите, чтобы ваш пользовательский интерфейс реагировал
PICK 2. Вы не можете иметь все 3 в Winforms.