将iList绑定到DataGridView,DGV不更新

时间:2012-04-16 12:18:21

标签: c# datagridview ilist

我有一个简单的测试类:

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

2 个答案:

答案 0 :(得分:2)

好的,所以我只是在一个计时器中添加了以下代码,并在某些条件下使其触发,这很有效:

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

答案 1 :(得分:0)

如果使用BindingList代替List,并使TEST_CLASS实现INotifyPropertyChanged,则网格将自行更新。但是,您需要确保仅通过某种形式的编组(例如SynchronizationContext或网格。Invoke())在UI线程上发生。