All streams
Search
Write a publication
Pull to refresh

Comments 9

Можно было сделать то же самое, используя BlockingCollection. Мне кажется, код выглядел бы понятнее.
Это показано в начале поста, только с использованием ConcurrentQueue
Не совсем. В отличие от BlockingCollection, ConcurrentQueue не имеет методов, ожидающих поступления элементов. TryDequeue — не блокирующий метод.
Эту задачу легко решить в COM задав определенные параметры апартамента. Подозреваю в .Net это также должно быть легко даже без использования interop методов.
Полагаю что Dispatcher и есть то самое «легкое» решение. Если есть проще буду рад узнать.
Неплохо, но в этом конкретном случае имхо проще сделать свой поток, который просто будет ожидать поступления новых элементов. А чтобы поток не крутился в вечном цикле, управлять им при помощи EventWaitHandle. Остановка потока производится аналогично, — устанавливаем isStopped в true и вызываем waitHandle.Set(). Поток просыпается и понимает, что ему приказано умереть. Этот подход прост и более универсален, поскольку не требует зависимости от WPF.
А он и не крутится. Я предполагаю что механизм Dispatcher'а работает так как вы описали и является стандартным средством для решения таких вопросов. Началось все с того что сделал реализацию руками, а уже потом решил поискать готовые решения.

Да зависимость от WPF действительно присутствует, но я разрабатывал именно WPF приложение.
Ага, я так и предположил.
Мне кажется, что стоит упомянуть об этом в статье. Нередко приходится отказываться от использования готовых решений из-за подобных зависимостей.
Sign up to leave a comment.

Articles