Show()
показывает новую форму, затем возвращает. Если это все, что делает поток, то поток выйдет, и это уничтожит форму.
ShowDialog()
показывает форму, а затем начинает запускать насос сообщений, пока форма не будет скрыта или уничтожена, ShowDialog()
не возвращается, поэтому ваш поток продолжает работать.
Если Вы имеете в виду, что для этих форм каждая ведет себя как отдельное окно приложения. тогда вы также можете использовать Application.Run () после form.Show()
, чтобы запустить насос сообщений для формы в этом потоке. Недостатком такого способа является то, что, когда любая из ваших форм закрыта, она может в итоге завершить весь процесс из-за способа обработки WM_QUIT.
Но кроме того, как вы будете иметь дело с закрытием приложения, Form.ShowDialog()
очень похоже на Form.Show()
, за которым следует Application.Run()
. Условия, из-за которых насос сообщений выходит из этого режима, немного отличаются, поэтому вы выбираете одно или другое, в основном исходя из того, как вы хотите, чтобы ваше приложение обрабатывало закрытие одной из ваших форм.