Loop список при добавлении к нему

Я построил свою систему в c-sharp (winforms) и столкнулся с проблемой. На мой взгляд - мой графический интерфейс - я запускаю довольно сложный алгоритм, который в каждом цикле добавляет результат в список в моем представлении. Алгоритм работает в презентере (шаблон MVP) с использованием фонового работника, что позволяет представлению не зависать. Как я уже говорил, алгоритм работает в цикле, и, поскольку он очень тяжелый, я хочу обработать результаты алгоритма по мере их поступления.

Посмотреть:

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

Фоновая работа в докладчике:

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

Подводя итог, как я могу начать обработку списка, в то время как фоновый работник добавляет к нему? Конечно, фоновый работник может работать быстрее, чем обработка списка, и наоборот - при обработке, возможно, придется ждать, пока результаты поступят в список, и список должен быть в состоянии создать стек результатов.

Я понимаю, что этот вопрос может быть размытым, но если вы зададите мне вопросы, я уверен, что смогу лучше определить проблему.

4 ответа

Решение

Используйте очередь и сделайте так, чтобы два потока рассматривали ее как производителя и потребителя.

Используйте потокобезопасную очередь для управления вашим шаблоном производителя / потребителя, например.NET 4 ConcurrentQueue: http://www.codethinked.com/post/2010/02/04/NET-40-and-System_Collections_Concurrent_ConcurrentQueue.aspx

Заставьте BackgroundWorker вызвать метод в представлении, которое добавляет элемент в список и обрабатывает его.

Это то, что вы можете использовать ObservableCollection и поймать CollectionChanged событие, чтобы поймать и обработать каждый элемент, как он добавлен в коллекцию?

Другие вопросы по тегам