У меня была такая же проблема. Когда мои dataGridViews обновлялись из потока пользовательского интерфейса, они работали нормально. Когда я попытался добавить к ним ряд строк из backgroundWorker, они перестали отвечать.
Чтобы исправить это, я добавил строки в таблицу данных. Когда я запускаю backgroundWorker, я устанавливаю свойство .datasource объекта dataGridView в ничто. Когда рабочий завершает работу, я снова возвращаю его в dataTable. Это вынуждает dataGridView обновлять себя и разрывает синхронную связь между тем, что происходит в рабочем потоке, и тем, что отображается в пользовательском интерфейсе, что, по-видимому, облегчает неотзывание после завершения рабочего.
Пример использования:
Private Sub button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn1.Click
If bgWorker1.IsBusy <> True Then
dataGridView1.DataSource = Nothing
bgWorker1.RunWorkerAsync()
End If
End Sub
Private Sub bgWorker_DoWork(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bgWorker1.DoWork
dataTable1.Rows.Add("data")
End Sub
Private Sub bgWorker_RunWorkerCompleted(ByVal sender As System.Object, ByVal e As RunWorkerCompletedEventArgs) Handles bgWorker1.RunWorkerCompleted
dataGridView1.DataSource = dataTable1
dataGridView1.Refresh()
End Sub