У меня есть DataGridView, который использует DataTable для своего источника данных.У меня также есть BackgroundWorker, который обновляет объект DataTable.Это вызывает исключение IndexOutOfRange при обновлении объекта DataTable.Если я обновил DataTable в главном потоке пользовательского интерфейса, исключений не будет.
Как я могу предотвратить это исключение?Я только обновляю DataTable, не переназначая источник данных.
public partial class Form1 : Form
{
DataTable myData = null;
BackgroundWorker worker = new BackgroundWorker();
public Form1()
{
InitializeComponent();
myData = new DataTable();
}
private void Form1_Load(object sender, EventArgs e)
{
dataGridView1.DataSource = myData;
}
private void button1_Click(object sender, EventArgs e)
{
worker.DoWork += new DoWorkEventHandler(PopulateData);
worker.RunWorkerAsync();
}
private void PopulateData(object sender, DoWorkEventArgs e)
{
......
//update datatable
myDataAdapter.Fill(myData); //Exception caused by this call
}
}
Редактировать: я могу обойти это, создав второй объект DataTable и обновив его, затем установив Datasource DataTable = обновленный DataTable вBackgroundWorker RunWorkerCompleted событие, но наличие двух DataTables кажется немного глупым и пустой тратой ресурсов.
Редактировать: исключение выдается на
Application.Run(new Form1());
в Program.cs, т.е. непо моему коду.