Попробуйте что-то более похожее на это:
this.Hide();
Main.ShowDialog();
this.Close();
Вы хотите скрыть форму входа перед тем, как отобразить диалоговое окно, а затем закрыть форму входа после закрытия диалогового окна.
Простое закрытие диалогового окна входа в систему в конечном итоге приведет к завершению приложения, так что это ненастоящее решение, но вы все равно хотите скрыть вход в систему.
Проще говоря, расположите вещи в том порядке, в котором вы хотите их видеть, особенно при работе с циклами сообщений.
Сначала вы скрываете форму входа в систему.
Затем вы показываете диалоговое окно Основной формы, но не позволяете вызывающей стороне ShowDialog () продолжаться, пока диалоговое окно не будет закрыто.
Последнее, один раздиалоговое окно закрыто, вы закрываете форму входа, заканчивая приложение.