【发布时间】:2011-09-09 10:24:35
【问题描述】:
我有一个使用 DataTable 作为其数据源的 DataGridView。我还有一个更新 DataTable 对象的 BackgroundWorker。这会在更新 DataTable 对象时导致 IndexOutOfRange 异常。如果我在主 UI 线程上更新了 DataTable,也不例外。
我怎样才能防止这个异常?我只是在更新 DataTable,而不是重新分配 Datasource。
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 对象并对其进行更新来解决此问题,然后在 BackgroundWorker RunWorkerCompleted 事件中设置 Datasource DataTable = 更新的 DataTable,但必须拥有两个 DataTable 似乎有点愚蠢并且浪费资源。
编辑:异常被抛出
Application.Run(new Form1());
在 Program.cs 中,即不是我的代码。
【问题讨论】:
-
会帮你贴一些相关的代码
-
能否请您发布一些代码。你调试过你的代码吗?
-
恕我直言,WPF 使用的并发内存模型太容易出现此类问题。 ://
-
我认为代码太简单了,无法发布。 @Gleno 这是直接的 WinForms,而不是 WPF。
标签: c# winforms datagridview backgroundworker