将 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。每次更新课程时都更新()?这样做的最佳方法是什么,因为我将有数千个线程不断更新类?谢谢!

将 iList 绑定到 DataGridView,DGV 未更新

好的,所以我只是在计时器中添加了以下代码并使其在某些情况下触发,效果很好:

            grid.DataSource = null;
            grid.DataSource = MY_LIST;
            grid.Invalidate();

如果使用 BindingList 而不是 List,并使TEST_CLASS实现 INotifyPropertyChanged,则网格将自行更新。但是,您需要确保仅通过某种形式的封送处理(如同步上下文或网格)在 UI 线程上发生。调用())。