Мне кажется, проблема в том, что вы блокируете поток пользовательского интерфейса с помощью Thread.Join.
Thread.Join теоретически будет продолжать качать сообщения пользовательского интерфейса, но в действительности это не всегда работает.
см. Блог Криса Брамма здесь .Специально
Чистый эффект заключается в том, что мы всегда будем прокачивать вызовы COM, ожидающие входа в вашу STA.И любые SendMessages для любых окон будут обслуживаться.Но большинство сообщений PostMessages будут отложены до тех пор, пока вы не закончите блокировку.
Вы должны позволить завершить событие кнопки, и новая ветка отправит сообщение обратно, когда это будет сделано (например, с помощью backgroundworker или какого-либо другого асинхронного).framework)
(Ваш оператор catch в любом случае бесполезен, поскольку он будет перехватывать только исключения созданий потоков.)