添加循环列表

时间:2010-12-20 18:47:19

标签: c# loops backgroundworker

我用c-sharp(winforms)构建了我的系统,我遇到了一个问题。在我看来 - 我的图形界面 - 我正在开始一个非常繁重的算法,在每个循环中将结果添加到我视图中的列表中。该算法使用backgroundworker在演示者(MVP模式)中运行 - 使视图不会冻结。正如我之前所说,算法在循环中运行,因为它太重了,我想在算法进入时处理算法的结果。

查看:

...
public List<string> Results { get; }
...
_presenter.RunAlgorithmAsync();
//Start processing results
...

演示者中的背景工作者:

...
_view.Results.Add(result);
...

总结一下,如何在backgroundworker添加列表时开始处理列表?当然,后台工作者可以比列表处理更快地工作,反之亦然 - 处理可能必须等待结果到达列表,并且列表需要能够建立一堆结果。

我意识到这个问题可能很模糊,但如果你问我问题,我相信我可以更好地定义问题。

4 个答案:

答案 0 :(得分:5)

使用队列并让两个线程将其视为producer and consumer

答案 1 :(得分:2)

使BackgroundWorker在视图中调用一个方法,将该项添加到列表中并对其进行处理。

答案 2 :(得分:2)

使用线程安全队列来驱动您的生产者/消费者模式,例如.NET 4 ConcurrentQueue:http://www.codethinked.com/post/2010/02/04/NET-40-and-System_Collections_Concurrent_ConcurrentQueue.aspx

答案 3 :(得分:1)

是否可以使用ObservableCollection并捕获CollectionChanged事件来捕获和处理每个项目,因为它已添加到集合中?