C# DGV中的所有2个单元格都使用相同的数据进行更新。在我看来,这些线索好像混在一起了

C# DGV中的所有2个单元格都使用相同的数据进行更新。在我看来,这些线索好像混在一起了,c#,multithreading,winforms,datagridview,C#,Multithreading,Winforms,Datagridview,我正在尝试在C#Winform中更新DataGridView。假设此DGV中只有2个单元 public void getMarketDataForAllStocks() { Thread thread = new Thread(() => getMarketData("AAPL")); thread.IsBackground = true; thread.Start(); Thread thread2 = new Thread(() => getMa

我正在尝试在C#Winform中更新DataGridView。假设此DGV中只有2个单元

public void getMarketDataForAllStocks()
{
    Thread thread = new Thread(() => getMarketData("AAPL"));
    thread.IsBackground = true;
    thread.Start();

    Thread thread2 = new Thread(() => getMarketData("GOOG"));
    thread2.IsBackground = true;
    thread2.Start();
}
getMarketData()是建立TCP连接并获取流的方法

从连接接收到流后,它将使用数据(来自流)更新DGV中的所有单元

我的问题是,DGV中的所有2个单元格都用相同的数据更新。在我看来,这些线索好像混在一起了


来自这两个线程的数据值相同的可能原因是什么?是因为我在这里创建了多个线程吗?

您不应该从UI线程以外的任何线程访问DGV。作为一个UI控件,它专门设计为只能从UI线程访问。

getMarketData做什么,dgv是如何/在哪里更新的?@AlexeiLevenkov不是所有控件都足够好,可以在您对它们进行变异时为您抛出该异常。例如,当您改变DGV的数据源时,它不会抛出任何异常。这并不意味着它可以工作,它只是意味着它不会告诉您(以异常的形式)它不会工作。不可能用您提供的示例说明为什么您的代码不能产生预期的结果。到目前为止,以下情况是错误的-可能从非UI线程更新UI控件,可能使用静态(或简单相同)变量存储数据…@Servy-不知道DGV这样的公共控件不会验证调用方的线程。。。事实上,这并没有改变(未显示)代码可能错误的事实。