См. Этот вопрос StackOverflow:
Обновление DataGrid из BackGroundWorker
Я предполагаю, что вы должны обращаться к объекту пользовательского интерфейса, используя метод Invoke.
Если не попробовать использовать следующий подход (Выполняет указанный делегат в потоке, который владеет дескриптором основного элемента управления, с указанным списком аргументов.):
<code>
//In Form.Designer.cs </p>
<p>ProgressBar progressBar= new ProgressBar (); </p>
<p>//In code behind under Background worker method
ProgressVlaueSetter SetProgressValueDel = SetProgressValue;<br>
if (progressBar.InvokeRequired)
{<br>
progressBar.Invoke(SetProgressValueDel , 20);
} </p>
<p>private delegate void ProgressVlaueSetter (intvalue); </p>
<p>//Set method invoked by background thread
private void SetProgressValue(intvalue)
{
progressBar.Value= value;
}