Писать код за тебя не буду, поскольку 1 раз написанный код дает понимания больше чем 1000 объяснений. Но вкратце объясню.
Тебе надо подписать 3 события(2 из них не обязательные, но лучше таки подписать):
DoWork - собственно то что будет выполнятся в потоке.
ProgressChanged - можно вызывать из метода события DoWork для вывода промежуточной информации на форму ( например если мы сделали часть работы мы вызываем это событие, функцией которого выполняем какое то взаимодействие с формой... (без всякой ахинеи типа "InvokeBegin" и тд.).
RunWorkerCompleted - вызывать не надо, само вызовется когда закончится событие DoWork. В этом методе также можно работать с формой напрямую.
Немного примеров:
Подпись события DoWork: backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);
Красным выделено название метода который будет выполнять backgroundWorker.
Также можно добавлять кликнув в графическом редакторе на обьект и в свойствах 2 раза клацнув на нужное событие.