В шаблоне проекта по умолчанию для WinForms отсутствует пара блоков try / catch, которые действительно необходимы для избежания подобных проблем.
Конструктор формы простой
InitializeComponent();
Лучше иметь блок try / catch, который выдает окно с сообщением об ошибке.
То же самое для Main в Program.cs
У меня иногда возникали проблемы с отображением окна сообщения при ошибке в этих методах, поэтому я прибегаю к отображению окна консоли:
[DllImport("kernel32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool AllocConsole();
Затем позвоните:
string msg = "Some explanation.";
AllocConsole();
Console.WriteLine(msg);
MessageBox.Show(msg);