Чтобы ваше приложение оставалось отзывчивым, ваш основной поток графического интерфейса должен быть свободен для обработки входящих сообщений. Это даже верно для рисования на экран; Вы можете обновить текст метки, но он не будет отображаться на экране до тех пор, пока не будет обработано сообщение «обновить текст метки».
Простой способ быть отзывчивым - часто вызывать Application.DoEvents (). Это будет в основном обрабатывать все входящие сообщения и возвращать.
Если у вас есть отдельные операции, которые занимают много времени, например, ExecuteReader (), вы не сможете вызывать DoEvents () достаточно часто. В этом случае вы должны вернуться к фоновой теме. Одним из относительно простых способов использования фонового потока является компонент BackgroundWorker. В этом блоге есть хороший пример .