在使用多线程操作同一个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、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();
}
}这个问题应该如何解决,有没有好的办法?
2.建议不要直接对控件进行操作,
增删改都对后台的datasource进行,操作完成后,重新绑定
3.因为控件非线程安全,需要对datasource加锁