maneira correta de implementar uma barra de progresso em C #

Estou aprendendo winforms e estabeleci um objetivo simples de criar uma barra de progresso que vai de vazia a cheia. Aqui está minha tentativa deformada:

public partial class Form1 : Form
{
    static BackgroundWorker bw = new BackgroundWorker();

    public Form1()
    {
        InitializeComponent();
        bw.DoWork += bw_DoWork;
        bw.RunWorkerAsync();
    }

    void bw_DoWork(object sender, DoWorkEventArgs e)
    {
        for(int i=0; i<100; ++i)
        {
            progressBar1.PerformStep();
            Thread.Sleep(10);
        }
    }
}

Tenho certeza de que oThread.Sleep() é repreensível. Como evito isso aqui?

questionAnswers(3)

yourAnswerToTheQuestion