我有一个简单的测试类:
public partial class TEST_CLASS
{
public string IP { get; set; }
public int PORT { get; set; }
}
iList<TEST_CLASS> MY_CLASS = new List<TEST_CLASS>();
我有以下代码将类绑定到DGV:
TEST_CLASS n = new TEST_CLASS();
MY_CLASS.Add(n);
grid_nodes.DataSource = MY_CLASS;
Thread t = new Thread(set1);
t.Start();
Thread t2 = new Thread(set2);
t2.Start();
用于将测试目的更新为随机值的线程:
public void set1()
{
while (true)
{
Random r = new Random();
MY_CLASS[0].IP = r.Next(999900);
Thread.Sleep(100);
}
}
public void set2()
{
while (true)
{
Random r = new Random();
MY_CLASS[0].PORT = r.Next(999900);
Thread.Sleep(100);
}
}
问题是DGV没有正确更新。我每次单击一个单元格时才会看到更新。
我将有数千行和单独的线程更新MY_CLASS,我需要更改才能显示&#39; live&#39;在DGV上。
据我所知,每次更新课程时都需要调用DGV.Update()?这样做的最佳方法是什么,因为我将有数千个线程不断更新课程?谢谢!
答案 0 :(得分:2)
grid.DataSource = null;
grid.DataSource = MY_LIST;
grid.Invalidate();
答案 1 :(得分:0)
如果使用BindingList代替List,并使TEST_CLASS实现INotifyPropertyChanged,则网格将自行更新。但是,您需要确保仅通过某种形式的编组(例如SynchronizationContext或网格。Invoke())在UI线程上发生。