C# 无法使DataGridView多次绑定到数据源

C# 无法使DataGridView多次绑定到数据源,c#,multithreading,winforms,data-binding,datagridview,C#,Multithreading,Winforms,Data Binding,Datagridview,我有一个Winforms GUI应用程序。我有一个名为FinishedTests\u Loops\u DGV的简单类列表。正在其他线程(计时器线程)中添加此列表。将新类添加到列表(计时器线程内部)后,我调用updatelopsdgv(),调用DataGridView并更新它: public void updateLoopsDGV() { if (DGV_Loops.InvokeRequired) { DGV_Loops.BeginInvoke((MethodInv

我有一个Winforms GUI应用程序。我有一个名为
FinishedTests\u Loops\u DGV
的简单类列表。正在其他线程(计时器线程)中添加此列表。将新类添加到列表(计时器线程内部)后,我调用
updatelopsdgv()
,调用
DataGridView
并更新它:

public void updateLoopsDGV()
{
    if (DGV_Loops.InvokeRequired)
    {
        DGV_Loops.BeginInvoke((MethodInvoker)delegate()
        {
            DGV_Loops.DataSource = FinishedTests_Loops_DGV;
        });
    }
}
这只工作一次,这意味着一旦第一个元素被添加到列表中,我会看到第一行出现在
DataGridView
中,但是对
UpdateLopSDGV()
的任何进一步调用都不会将行添加到
DataGridView
。我在调试器中检查了我的列表,例如4个元素长,并且调用了函数,但在
DataGridView
中仍然只看到1行

即使我试图通过按下某些按钮(在GUI线程中)来更新
DataGridView


它仍然不起作用。我做错了什么?

我认为您的问题是试图不正确地设置数据源

您说
FinishedTests\u Loops\u DGV
是一个类,并将其作为
数据源提供。这很奇怪,因为它绑定到
类型
对象,而不是实际的列表

我认为您应该创建一个
IEnumerable
变量,并将其作为
DataSource
提供,如下所示:

IEnumerable<FinishedTests_Loops_DGV> aList = ...; // actual data get
private void button3_Click(object sender, EventArgs e)
{
    DGV_Loops.DataSource = aList;
}
IEnumerable=…;//实际数据获取
私有无效按钮3\u单击(对象发送者,事件参数e)
{
DGV_Loops.DataSource=aList;
}

DataGridView
将不会更新,因为您使用相同的列表实例来设置
。数据源
()

然后,
列表
不支持集合中更改的通知。
DataGridView
永远不会知道列表中的更改

改为使用
BindingList
,那么只需将其绑定到
DataSource
一次就足够了。

添加的项目将自动显示在
DataGridView

中,您可以为
FinishedTests\u Loops\u DGV
变量显示一些代码吗?在问题的第一行:我有一个名为
FinishedTests\u Loops\u DGV
IEnumerable<FinishedTests_Loops_DGV> aList = ...; // actual data get
private void button3_Click(object sender, EventArgs e)
{
    DGV_Loops.DataSource = aList;
}