@JonWillis: я бы попросил потребителя удалить дубликаты. Это упрощает производителей и помещает удаление дубликатов в одном месте. И, да, если теги появляются слишком быстро, потребитель может отстать, но на практике он будет отставать только при большой нагрузке (очень много тегов появляется очень быстро). В этот момент очередь удерживает очередь. Но опять же, должна быть только короткая задержка, если таковая имеется. Если это проблема, добавьте еще одного потребителя. И да, бессмысленно управлять производителями, если нет потребителя.
опрос для обратной связи, чтобы убедиться, что я выбрал правильный подход и правильно обработал потоки. У меня есть ощущение, что мне может понадобиться установить некоторые из моих собственных тем, поэтому все отзывы приветствуются.
У меня проблема с чтением меток RFID с нуля или более считывателей RFID. Я могу читать для одного читателя без проблем, поэтому чтение из нескольких не будет проблемой. Каждый тег или пакет тегов, прочитанный читателем, доставляется событием .Net.
Мой план состоит в том, чтобы установить класс ReaderControl, который поддерживает считыватели, соединение, запуск, остановку и т. Д. Этот класс будет прослушиватьTagRead события от читателей. Для каждого события, которое он обрабатывает (примерно каждые 250 мс), он помещает идентификаторы тегов чтения (строку) в HashSet, чтобы сохранить их уникальность, а HashSet находится в ReaderControl. ReaderControl будет содержать таймер, который срабатывает / истекает каждые 500 мсек, это событие TimerElapsed обрабатывается ReaderControl, который будет упаковывать теги, прочитанные всеми читателями, и подниматьTagsRead мероприятие. Цель этого состоит в том, чтобы свести событие к минимуму и уменьшить количество дублирующих тегов.
TagsReads событие обрабатывается другим классом с именем TagTranslator. Этот класс будет перебирать идентификаторы тега (строки) и определять, к чему относится тег, т. Е. Объект IPerson. Этот класс запустит событие по завершении перевода сPeopleSeen мероприятие.
PeopleSeen Событие обрабатывается моделью в графическом интерфейсе (шаблон MVP). Общая идея заключается в том, что дисплей с графическим интерфейсом показывает имена людей, которые проходят через считыватели RFID. Дисплей просто, но очевидно, под капотами теги читаются в асыче и переводятся в «реальные» объекты для отображения.
Считаете ли вы, что ReaderControl должен работать в своем собственном потоке, я думаю, что он должен. Как мне упаковать этот класс в его собственный поток, чтобы просто продолжать читать теги независимо от того, что делает GUI. Также вы думаете, когда TagTranslator при обработке событий должен создавать потоки для обработки перевода.