Почему событие не запускается до завершения параллельных потоков? - PullRequest
0 голосов
/ 26 апреля 2011

Я получаю список элементов и помещаю их в ListView.Этот список может быть обширным, поэтому я использую Parallel.ForEach (), чтобы иметь дело с созданием объектов ListObjects.

После создания каждого элемента я запускаю событие в потоке пользовательского интерфейса, чтобы добавить элемент в ListView.Моя регистрация указывает мне, что события ждут, пока параллельные задачи не будут завершены, прежде чем продолжить с событием AddItem.Это не помогает мне.Мне нужно, чтобы дисплей обновлялся как можно быстрее, но если он все равно ожидает события, зачем запускать параллельно?

Разве я не должен использовать события для этого?Будет ли это лучше, если создать делегат для хранения метода обратного вызова пользовательского интерфейса и использовать его вместо этого?

Ответы [ 2 ]

0 голосов
/ 26 апреля 2011

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

Я нашел то, что искал. Это виртуальный ListView, он же ListView в VirtualMode.

Смотрите здесь:

http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.virtualmode.aspx

0 голосов
/ 26 апреля 2011

Да, цель Parallel.ForEach() - улучшить время завершения заполнения ListView. Но вам все еще нужно дождаться полной загрузки ListView, прежде чем вы сможете отобразить его.

Если вам нужно что-то, что вы можете просматривать во время его заполнения, вы можете попробовать ObservableCollection. Но вы должны быть осторожны; результирующая активность пользовательского интерфейса может снизить производительность вашего приложения.

...