c#线程委托问题

本文关键字:问题 线程 | 更新日期: 2023-09-27 18:03:38

我最终被迫将我的程序分割成线程,因为它慢得令人痛苦。

我的情况是,我有两个ComponentOne Flexgrid DataGridView组件…一个允许直接编辑。我需要第二个网格根据第一个网格更新它的内容。

目前我的代码如下:

class MyApp
{
    void GridOne_AfterEdit(object sender, RowColEventArgs e)
    {
        UpdateList();
    }
    void UpdateList()
    {
        foreach (Row r in GridOne.Rows)
        {
            //calculate information per row and add to GridTwo
        }
    }
}



这是难以忍受的缓慢……从我对委托的理解来看,我需要对每个需要访问/引用的组件都有一个委托?

我尝试过诸如将GridTwo分配给数据表并从线程修改数据表之类的事情,但最终只有空白条目。
此外,我注意到我有重新启动它的问题,我想我可以让线程始终侦听或响应布尔值。

不要求别人来完成我的代码。简单地问一下,这个问题的有效选择是什么。谢谢你的建议!

c#线程委托问题

foreach (Row r in GridOne.Rows)

不会有任何有趣或成功的线索

要获得并行性,最简单的方法就是对行集进行分段,类似于(这里没有智能意义,所以请原谅轻微的误用):

var gridOneFirstHalf = new Row[][] { GridOne.Rows.Take(GridOne.Rows.Count / 2), new Row[GridOne.Rows.Count / 2] };
var gridOneSecondHalf = new Row[][] { GridOne.Rows.Skip(GridOne.Rows.Count / 2).ToArray(), new Row[GridOne.Rows.Count / 2] };
ParameterizedThreadStart halfThreadStarter = new ParameterizedThreadState((state) => ProcessIntoResultsMember(state));
Thread processFirstHalf = new Thread(halfThreadStarter, gridOneFirstHalf);
Thread processSecondHalf = new Thread(halfThreadStarter, gridOneSecondHalf);
processFirstHalf.Start();
processSecondHalf.Start();
processFirstHalf.Join();
processSecondHalf.Join();
GridTwo.Rows = gridOneFirstHalf[1].Concat(gridOneSecondHalf[1]);

我不熟悉这个GridOne控件,或者我所指的linq扩展是否可用。