从另一个线程更新DataGridView
时出现问题。让我解释。当用户单击表单上的按钮时,我需要用一些行填充网格。这个过程需要一些时间,所以我在一个单独的线程中完成。在开始线程之前,我将DataGridView.Enabled
属性设置为false
,以防止用户在添加项目时编辑项目,并在工作线程结束之前将其设置为Enabled
回到true
。当从另一个线程更新时,DataGridView不会重新绘制自己
问题是DataGridView
如果需要显示滚动条,则不会正确更新其内容。我会用截图说明这一点:
正如你所看到的,最后可见行部分绘制和DataGridView
不会向下滚动。如果我调整网格大小,使其重新绘制,所有行都正常显示。
下面是一些代码:
private void button1_Click(object sender, EventArgs e)
{
string[] fileNames = new string[] { "file1", "file2", "file3" };
Thread AddFilesToListThread = new Thread(ThreadProcAddRowsToGrid);
dataGridView1.Enabled = false;
AddFilesToListThread.Start(fileNames);
}
delegate void EmptyDelegate();
private void ThreadProcAddRowsToGrid(object fileNames)
{
string[] files = (string[])fileNames;
foreach (string file in files)
{
EmptyDelegate func = delegate
{
dataGridView1.Rows.Add(file);
};
this.Invoke(func);
}
EmptyDelegate func1 = delegate
{
dataGridView1.Enabled = true;
};
this.BeginInvoke(func1);
}
我也注意到,只有Enabled
财产造成这种奇怪的行为。改变,例如,BackgroundColor
工作正常。
你能帮我看看问题出在哪里吗?
是的,我尝试在启用网格后放置一个'Refresh()',但它不会帮助。 –
更新可能的替代方案,我雇用似乎帮助我 – Coops
我还没有尝试过,但我想指出,没有'Enabled'属性更改一切工作正常。 –