Вы можете запустить длинную задачу в потоке пользовательского интерфейса и одновременно показать индикатор выполнения.
Однако вы потеряете анимацию Win7 / Vista на индикаторе выполнения, и если вы не запустите цикл сообщений в течение пяти секунд, Windows пометит ваше приложение как «не отвечающее».
Можно обновить индикатор выполнения как из BackgroundWorker
(для него есть специальные события), так и из функции, выполняемой в потоке пользовательского интерфейса. В последнем случае я передаю делегата, который может быть вызван для обновления индикатора выполнения.
Еще одна вещь: если вы работаете в потоке пользовательского интерфейса, вы не можете легко реализовать кнопку Отмена, потому что ваш насос сообщений заблокирован.
Так что я рекомендую BackgroundWorker
для более длинных задач. Для коротких задач может показаться заставка, как предложил Гейб в своем комментарии.