У меня проблема с обновлением DataGridView
из другого потока.Позволь мне объяснить.Когда пользователь нажимает кнопку на форме, мне нужно заполнить сетку несколькими строками.Этот процесс занимает некоторое время, поэтому я делаю это в отдельном потоке.Перед запуском потока я установил для свойства DataGridView.Enabled
значение false
, чтобы пользователь не мог редактировать элементы во время их добавления, и непосредственно перед окончанием рабочего потока я установил Enabled
обратно на true
.
* 1007.* Проблема в том, что
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
работает нормально.
Не могли бы вы помочь мне понять, в чем проблема?