Нет событий, запускаемых из набора классов System.Collections. *. Поскольку вы используете .NET 4.0, вы можете захотеть взглянуть на BlockingCollection<T>
, который вместо того, чтобы полагаться на события, вы бы использовали шаблон Producer-Consumer для получения элементов. из коллекции, поскольку они прибывают из другого потока. BlockingCollection<T>
позаботится обо всей поточной безопасности и синхронизации для вас эффективно.
Тип поддержки по умолчанию для BlockingCollection<T>
равен ConcurrentQueue<T>
, что звучит так, как вы хотите, но следует отметить, что вы можете изменить его на использование ConcurrentStack<T>
или ConcurrentBag<T>
, если вы хотите / не возражаете против различных характеристик заказа.
Еще одна замечательная особенность BlockingCollection<T>
- это возможность устанавливать границы , которая может помешать производителю добавлять больше элементов в коллекцию, чем потребители могут не отставать.
Для отличного описания всех аспектов этой темы, я предлагаю вам прочитать это сообщение в блоге от Alexeandra Rusina. В посте также рассматриваются способы работы с BlockingCollection с использованием параллельной библиотеки задач .