Как упоминает Джонатан Аллен, это не должно иметь значения. Если что-то еще не происходит. У меня было два случая, когда я не мог взаимодействовать с определенными элементами управления в событиях, генерируемых BackgroundWorker
. Единственное, что сработало, это использование метода Invoke
.
Попробуйте назначить DataSource
в том же потоке, который создал элемент управления DataGridView
. Вы делаете это с помощью метода Invoke
элемента управления. Используйте следующий код. (Я не проверял, но это стандартная схема.)
Если это не сработает, попробуйте предложение Джонатана Аллена.
На самом деле, делайте те предложения, которые проще всего попробовать первыми.
private delegate void SetDataSourceDelegate(object value);
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e) {
DataTable oData = null; //'assign data source
if (dataGridView1.InvokeRequired) {
dataGridView1.Invoke(new SetDataSourceDelegate(SetDataSource), new Object[] {oData});
}else{
SetDataSource(oData);
}
}
private void SetDataSource(object value) {
dataGridView1.DataSource = value;
}