Backgroundworker помогает вам поддерживать отзывчивость вашего интерфейса и прост в использовании. Он также заботится о многопоточности.
Фоновый работник также имеет событие ProgressChanged. Рабочий поток может сообщить о прогрессе с помощью метода ReportProgress(int percentProgress)
. Если вы не знаете процент, это не проблема; просто передайте количество песен, обработанных в качестве параметра. Это ваш обработчик события ProgressChanged, который получает этот номер. Пусть он делает все, что подходит с этим номером. Вызовите событие ProgressChanged после обработки определенного количества песен или по истечении определенного времени. Просто запомните время начала или время последнего изменения прогресса и посмотрите, сколько времени прошло с тех пор. Нет необходимости в таймере или тому подобном.
Обратите внимание, что фундаментальная проблема с многопоточностью заключается в том, что только UI-поток (тот, в котором работает код вашего основного приложения) может взаимодействовать с формами и элементами управления. Backgroundworker автоматически вызывает обработчики событий RunWorkerCompleted и ProgressChanged в потоке пользовательского интерфейса.