将 iList 绑定到 DataGridView,DGV 未更新
本文关键字:DGV 更新 DataGridView iList 绑定 | 更新日期: 2023-09-27 18:31:26
我有一个简单的测试类:
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,我需要在 DGV 上"实时"显示更改。
据我了解,我需要打电话给DGV。每次更新课程时都更新()?这样做的最佳方法是什么,因为我将有数千个线程不断更新类?谢谢!
好的,所以我只是在计时器中添加了以下代码并使其在某些情况下触发,效果很好:
grid.DataSource = null;
grid.DataSource = MY_LIST;
grid.Invalidate();
如果使用 BindingList 而不是 List,并使TEST_CLASS实现 INotifyPropertyChanged,则网格将自行更新。但是,您需要确保仅通过某种形式的封送处理(如同步上下文或网格)在 UI 线程上发生。调用())。