Заполнение данных в Gridview с помощью Thread

У меня есть элемент управления winform Datagridview в моей форме при загрузке, я заполняю почти 1000 и более записей. Каждые несколько секунд данные извлекаются с моего сервера sql и должны быть заполнены в сетке. Я не хочу, чтобы моя сетка замерзла. Пожалуйста, помогите мне с этим.....


person Karthikeyan    schedule 09.03.2011    source источник


Ответы (2)


  1. Поместите код населения в метод.
  2. Поместите цикл в метод, чтобы он выполнялся до тех пор, пока логическая переменная не будет установлена ​​в значение TRUE.
  3. Создайте объект потока, который вызывает этот метод.
  4. Запустите объект потока.
  5. Когда методу необходимо обновить сетку, вы ДОЛЖНЫ использовать DELEGATE и метод DataGridView.Invoke для обновления сетки; в противном случае вы получите ошибки потоковой передачи.
  6. Если вы хотите отменить поток, установите для переменной значение TRUE.
person Marc Johnston    schedule 09.03.2011

Просто используйте таймер, и когда он тикает, создайте новый поток и обновите файл DataGrid.

Пример с Windows Forms и TPL (.NET Framework 4 и 3.5).

Инициализируйте таймер:

this.timer = new Timer() { Interval = 2000 };
this.timer.Tick += OnFetch;
this.timer.Start();

Управление тиковым событием:

private void OnFetch(object sender, EventArgs e)
{
    Task.Factory.StartNew(() =>
    {
        // Get the data from your db
        var data = GetDbData();
        foreach (MyElement row in data)
        {
            if (dataGridView1.InvokeRequired)
            {
                dataGridView1.Invoke(new Action(() =>
                {
                    // Add the row
                }));
            }
        }
    });
}
person as-cii    schedule 09.03.2011