c# winform 中,需要dataGridView 动态增加行,并且付值。使用线程会报出 :
线程间操作无效: 从不是创建控件“”的线程访问它。
在构造函数中增加 CheckForIllegalCrossThreadCalls =false,可以实现功能,但是只要窗体一动,程序就挂了!
好像有委托定义,怎么实现啊,我对委托这部分不太懂。大家帮我看看
Thread vThread = new Thread(new ThreadStart(this.Onsales));
vThread.Start();private void Onsales()(简化了很多行代码)
{
     this.dataGridView1.RowCount++;(线程运行到此处错误。)
     for (int m = 0; m < 5; m++)
     {
        dataGridView1.Rows[j].Cells[m_tempdt.Columns[m].ColumnName].Value = dr[j][m_tempdt.Columns[m].ColumnName].ToString();
     }
}

解决方案 »

  1.   

    更新界面时需要调用控件的Invokeif(datagridview.invokerequired)
    {
     datagridview.invoke(更新的方法,更新的方法所需参数数组);
    }
    else
    {
     //直接更新界面
    }
      

  2.   

    private void Onsales()(简化了很多行代码) 

        this.Invoke(new MethodInvoke(delegate
        {
           this.dataGridView1.RowCount++;(线程运行到此处错误。) 
            for (int m = 0; m < 5; m++) 
           { 
                dataGridView1.Rows[j].Cells[m_tempdt.Columns[m].ColumnName].Value = dr[j][m_tempdt.Columns[m].ColumnName].ToString(); 
           }
        })); 
    }