代码之家  ›  专栏  ›  技术社区  ›  Nadjib Bendaoud

在线程中填充DataGridView

  •  0
  • Nadjib Bendaoud  · 技术社区  · 7 年前

    我有一个DataGridView,我想用数据填充它,DataGridView中的数据是动态生成的,没有可用作绑定的数据表,我使用循环并在每次迭代中填充DataGridView的每一行。

       private void Historique()
        {
            int k = 0;
            for(int i= this.start_his; i <= this.end_his; i++)
            {
                DGV.Rows.Add();
                DGV.Rows[k].Cells[0].Value = "semaine " + i;
                DGV.Rows[k].Cells[1].Value = TOOLS.GetMaxHebdo(this.annee_his, 
                i);
                k++;
            }
    
        }
    

    功能

     TOOLS.GetMaxHebdo(this.annee_his, i);
    

    需要一段时间才能做出响应,所以我想填充DataGridView的每一行,而不阻塞程序,并查看一行一行地显示,有没有一种方法可以使用线程或其他什么来实现这一点?

    3 回复  |  直到 7 年前
        1
  •  1
  •   Mike Makarov    7 年前

    是的,有一种方法。正是这个场景是异步/等待模式的基本用法之一。

    1. 添加 using System.Threading.Tasks; 在顶部。
    2. 将方法标记为异步: private async void Historique()
    3. 将慢速方法调用为任务: DGV.Rows[k].Cells[1].Value = await Task.Run(()=>TOOLS.GetMaxHebdo(this.annee_his, i));
        2
  •  0
  •   Jake Doe    7 年前

    您可以将load函数放在它自己的线程中,并在后台将线程运行到隐藏的dataGridView中,因此当程序启动时,数据已经在后台加载,并保存为dataTable,以便随时使用

    我怀疑很多人会太反感在程序开始时带有加载条的splashscreen:)
    希望这有帮助!

        3
  •  -2
  •   SparRow    7 年前

    这可能对你有帮助。通过线程调用函数以避免阻塞主线程和程序。

    Thread1 = new System.Threading.Thread(Historique);
    Thread1.Start();