this.WindowState = FormWindowState.Minimized;
Как только это произойдет, в вашем приложении не останется окна, которое все еще может получить фокус. Windows нужно найти другое, чтобы сосредоточиться, это будет окно другого приложения. Чуть позже появляется ваш диалог, но уже слишком поздно, фокус уже потерян.
Использование трюка, подобного Control.BeginInvoke (), для минимизации формы после отображаемое диалоговое окно также не работает, диалоговое окно автоматически закрывается, когда родительский элемент свернут. Лучшее, что вы можете сделать, это скрыть это. Вам придется использовать тот же трюк, чтобы восстановить его до закрытия диалогового окна, иначе вы все равно потеряете фокус. Как это:
protected override void OnClick(EventArgs e) {
using (var f = new Form1()) {
f.Text = "ShowDialog()";
this.BeginInvoke(new Action(() => this.Hide()));
f.FormClosing += delegate { this.Show(); };
f.ShowDialog();
}
}