Ханс Пассант дал мне отличный ответ здесь, поэтому я решил попросить более подробную информацию, чтобы попытаться понять, как работает Application.Run()
.
Насколько я понимаю из документов, кажется, что Application.Run()
запускает цикл обработки сообщений в текущем потоке, который, в свою очередь, позволяет ему обрабатывать пользовательский ввод (правильно?). Перегруженная версия Application.Run(Form)
в основном делает то же самое, только она существует, когда форма закрывается, и показывает форму по умолчанию.
Это вызывает несколько вопросов:
Main()
функцию, которая может общаться с пользователем (окна сообщений и т. д.), и дождаться ее выхода?ShowDialog
может работать, если вы не хотите, чтобы форма отображалась сразу при запуске (например, если у вас есть запущенный файл for, свернутый в системный трей)- По сути, ситуация была бы следующей: в подпункте «Main» есть список задач, которые нужно выполнить через 20 минут, а значок на панели задач сообщает пользователю, что программа будет работать через 20 минут. Таймер тикает через 20 минут и должен выполнить, скажем, прибл. 15 задач одна за другой, каждый раз создавая экземпляр диалогового окна прогресса, изначально скрытого на панели задач.
- `ShowDialog` отобразит нежелательную форму; поэтому я бы сделал это, передав диалогу выполнения обратный вызов функции, которая запускает следующую задачу. Но это не приведет к выходу из первой формы прогресса до выхода из второй, не так ли? Это означает, что в конечном итоге будет открыто 15 форм...
- Таким образом, решение может заключаться в вызове (begininvoke?) обратного вызова в основном цикле приложения... Только я не знаю, как это сделать, потому что у меня нет формы, связанной с циклом для вызова обратного вызова на ...
Надеюсь, мои вопросы ясны (могу многое напутать, извините),
Спасибо,
CFP.