'How can I use BackgroundWorker without using Thread.sleep in WPF

I have got progress bar from 0 to 100 000. I must display on my progressbar how quick is my loop in real, without Thread.sleep(1) beacuse it isn't real time, it is slower when i am using this. What shoud I do to show real time of my loop lifetime?

void worker_DoWork(object sender, DoWorkEventArgs e)
        {
            for (int i = 0; i < 100000; i++)
            {
                (sender as BackgroundWorker).ReportProgress(i);
                Thread.Sleep(1);
            }
        }

        void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            metroProgressBar.Value = e.ProgressPercentage;
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            BackgroundWorker worker = new BackgroundWorker();
            worker.WorkerReportsProgress = true;
            worker.DoWork += worker_DoWork;
            worker.ProgressChanged += worker_ProgressChanged;

            worker.RunWorkerAsync();

        }


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source