在使用多线程操作同一个datagridview时,涉及到行数据的增加以及清除,但是这种情况会出现以下问题
1、datagridview出现一个大红叉
2、
我自己简单写了一个测试的demo,代码如下:
 public partial class DatagridviewThreadTest 
    {
        public DatagridviewThreadTest()
        {
            InitializeComponent();
        }
        int XHH = 1;
        private void T1_Click(object sender, EventArgs e)
        {
            Thread t1 = new Thread(adddata);
            t1.Start();
        }        private void adddata()
        {
            while (true)
            {
                Thread.Sleep(300);
                if (dataGridViewX1.Rows.Count > 100)
                {
                    dataGridViewX1.Rows.Clear();
                }
  
                dataGridViewX1.Rows.Insert(0, 1);
                var row = dataGridViewX1.Rows[0];
                row.Cells["XH"].Value = XHH++;
            }
        }
        private void T2_Click(object sender, EventArgs e)
        {
            Thread t2 = new Thread(adddata);
            t2.Start();
        }
    }这个问题应该如何解决,有没有好的办法?

解决方案 »

  1.   

    1.如果有线程在遍历,有的线程在add或delete,那么肯定会出错
    2.建议不要直接对控件进行操作,
    增删改都对后台的datasource进行,操作完成后,重新绑定
    3.因为控件非线程安全,需要对datasource加锁
      

  2.   

    adddata方法里的逻辑代码不需要使用线程吧,多简单的逻辑处理。