@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 при обработке событий должен создавать потоки для обработки перевода.

Ответы на вопрос(1)

Ваш ответ на вопрос