Я предполагаю, что вы запускаете свой код в Windows XP или Vista / Win7 с выключенным Aero.При закрытии формы не пиксели на экране мгновенно исчезают.Диспетчер окон Windows видит, что окно для формы было разрушено и что под ним обнаруживаются части других окон.Он доставит сообщение WM_PAINT, чтобы сообщить им, что им нужно перекрасить те части окна, которые были открыты.
Это не будет работать должным образом, если одно или несколько из этих окон не накачивают петлю сообщения.,Они не могут видеть сообщение WM_PAINT.Они не будут перекрашиваться, пиксели закрытой формы останутся на экране.
Узнайте, почему эти окна не отвечают.Надеюсь, это ваше окно, и отладчик может показать вам, что делает поток пользовательского интерфейса.Убедитесь, что он не блокируется и не зацикливается.
После просмотра редактирования: действительно происходит блокирование, другого типа.Вызов MessageBox.Show () является модальным, он предотвращает завершение события VisibleChanged.Это задерживает закрытие формы.
Используйте System.Diagnostics.Debug.WriteLine () или Console.WriteLine (), чтобы получить диагностику в приложении Window Forms.Вы увидите это в окне вывода.Или просто используйте точку останова отладчика.