Заполнение данных в Gridview с использованием Thread - PullRequest
0 голосов
/ 09 марта 2011

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

Ответы [ 2 ]

0 голосов
/ 09 марта 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
                }));
            }
        }
    });
}
0 голосов
/ 09 марта 2011
  1. Поместите код населения в метод.
  2. Поместите цикл в метод так, чтобы он выполнялся до тех пор, пока для логической переменной не задано значение TRUE.
  3. Создайте объект потока, который вызывает этот метод.
  4. Запустить объект потока.
  5. Когда метод должен обновить сетку, вы ДОЛЖНЫ использовать DELEGATE и метод DataGridView.Invoke для обновления сетки; в противном случае вы получите сообщения о потоке.
  6. Если вы хотите отменить поток, установите переменную на TRUE.
...