C# 在datagridview循环中创建线程并保留该行

C# 在datagridview循环中创建线程并保留该行,c#,winforms,C#,Winforms,我正在尝试循环一个datagridview,并为每一行创建一个新任务(同时对每一行执行工作)。如果使用我当前的方法,它会丢失行吗 示例:如果我在datagridview中有1000行,在循环期间为每个行创建了一个任务,然后在任务期间更新了部分行,那么我是否需要以某种方式将行索引传递给新任务而不是下面的任务 例如: foreach (DataGridViewRow locaterow in Form1.form.MainGrid.Rows) //loop through maingrid

我正在尝试循环一个datagridview,并为每一行创建一个新任务(同时对每一行执行工作)。如果使用我当前的方法,它会丢失行吗

示例:如果我在datagridview中有1000行,在循环期间为每个行创建了一个任务,然后在任务期间更新了部分行,那么我是否需要以某种方式将行索引传递给新任务而不是下面的任务

例如:

foreach (DataGridViewRow locaterow in Form1.form.MainGrid.Rows) //loop through maingrid
                {
                        new Thread(() =>
                        {
                           locaterow.Cells["Mainvalue"].Value = Convert.ToInt32(locaterow.Cells["Mainvalue"].Value) + 1;
                         }).Start();
                 }

线程是否会更新启动线程的datagridview行?如果没有,我如何将行索引传递给新线程,以便在新线程创建后使用它?

不要为此使用线程。您不能在非UI线程中更新UI,您必须调用才能返回该线程。另外,正如@DanielA.White提到的,
不要为此使用线程
,老实说,你不需要这样做。为什么要创建一个全新的线程来执行此操作?该代码只是一个股票机器人的想法,它当前从datagridview一个接一个地执行订单。这个想法只是为了通过同时管理多个订单来提高执行效率。
Thread
的使用现在被认为是一种旧方法,并且不推荐用于大多数情况,因为引入了
Task
。现在您只处理
任务
线程池
。对于你的问题,如果你想在后台做你的工作,把你的逻辑移到像
task.Run(()=>{//do work})这样的任务上
无需传递索引,因为您只能从UI线程更新控件,所以每次要更新行时,它都会将您的更新排入控件队列。先进行所有计算,然后将其绑定到UI。你会有更好的经验