我处于这样的位置,我最终被迫将我的程序分成线程,因为它非常缓慢。
我的情况是我有两个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分配给DataTable并从线程中修改DataTable的事情,但最后只有空白的委托。
此外,我注意到我重新启动它有问题,我想我可以让线程始终监听或响应布尔值。
不要求别人完成我的代码。简单地问一个有效的选择是什么。感谢您的任何提示!
答案 0 :(得分:1)
foreach (Row r in GridOne.Rows)
不会有任何乐趣或成功。
答案 1 :(得分:0)
你可能做的最简单的事情就是划分你的行集,比如(这里没有intellisense所以请原谅轻微的误用):
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扩展是否可用..