У меня была проблема, похожая на плакат, когда код для скрытия формы в событии form_Load срабатывал до того, как форма полностью загрузилась, из-за чего метод Hide () не работал (не зависал, просто не работал должным образом ).
Другие ответы хороши и работают, но я обнаружил, что в общем случае событие form_Load часто имеет такие проблемы, и то, что вы хотите поместить туда, может легко попасть в конструктор или событие form_Shown.
В любом случае, когда я переместил тот же код, который проверяет некоторые вещи, а затем скрывает форму, когда она не нужна (форма входа в систему при сбое единого входа), она работала, как и ожидалось.