Входные и события устройства (документация по пакету SDK для .NET версии 1.14)

Все устройства POS имеют возможность создавать события или изменять состояние независимо от приложения. Например, если оператор отключает устройство PinPad , приложение не имеет прямого способа обнаружения этого изменения, так как оно не является изменением состояния, запрошенным приложением. Объект службы должен иметь некоторый способ оповещения приложения об этих изменениях состояния.

Многопоточность

Так как при постоянном опросе объекта службы для текущего состояния приложение будет слишком дорогим, необходимо другое решение. Как правило, решение заключается в создании фонового потока для мониторинга устройства.

Как показано в других примерах, создание потока чтения всегда необходимо для устройств ввода, таких сканеров или магнитных полос. Для выходных устройств, таких как отображение строк и принтеров, второй поток часто необходим для отслеживания изменений состояния, таких как потеря питания или автономный режим, а затем для отправки события StatusUpdateEvent в приложение.

Таким образом объект службы может реагировать на запросы от приложения при асинхронном мониторинге оборудования.

Определение событий

События — это механизм, с помощью которого объект службы уведомляет приложение об изменении состояния устройства или поступление новых данных.

Как правило, событие — это уведомление между одним потоком или процессом и другим, что-то произошло. В частности, Microsoft Point of Service для .NET (POS для .NET) использует функцию делегатов .NET для доставки в приложение.

Спецификация Unified Point Of Service (UnifiedPOS) определяет набор из пяти событий: DataEvent, DirectIOEvent, ErrorEvent, OutputCompleteEvent и StatusUpdateEvent. Каждый объект службы может быть разрешен только для поддержки подмножества этих объектов. Точное содержимое данных также зависит от типа объекта службы.

Очереди событий

При создании класса объекта службы, производного от одного из pos-классов для базовых классов .NET, события не отправляются непосредственно из объекта службы в приложение. Вместо этого события помещаются в очередь, управляемую базовым классом. Так как существуют условия, которые должны выполняться перед доставкой событий в приложение, код в базовом классе отправляет события только в том случае, если это необходимо сделать. Объект службы не должен знать очередь или требования, которые должны быть выполнены перед запуском события. Это значительно упрощает нагрузку на разработчика объектов службы.

Очередь событий работает асинхронно с помощью собственного потока. Это означает, что объект службы не ожидает фактической доставки события.

Добавление событий в очередь

POS для базовых классов .NET предоставляют ряд способов добавления события в очередь в зависимости от объекта службы и типа события.

Многие базовые классы имеют вспомогательные методы для упрощения очереди определенных событий; в большинстве случаев — события DataEvent. Например, метод MsrBase.GoodRead можно использовать для очереди события DataEvent после успешного карта чтения. Аналогичным образом PosKeyboard.KeyDown очереди DataEvent , указывающие на то, что клавиша была нажата.

События также могут быть автоматически помещены в очередь базовым классом при изменении определенного состояния. Например, если объект службы установил свойство Properties.CapPowerReporting , то свойство StatusUpdateEvent , указывающее, что изменение питания может быть отправлено просто путем задания свойства Properties.PowerState в объекте службы.

Наконец, если требуется, объект службы может в частности очередь события с помощью любого из переопределения QueueEvent . Это может использоваться чаще всего для отправки DirectIOEvent. Так как события DirectIOEvent относятся к поставщику и относятся к устройству, универсальный механизм не может использоваться для их очереди.

Синхронные входные данные

Хотя большинство входных данных устройства считывается асинхронно объектом службы, а затем отправляется в приложение в виде событий, существуют экземпляры, однако, где приложение может запрашивать данные из объекта службы и не возвращать, пока данные не будут готовы или истекло время ожидания. Дополнительные сведения о входных данных на основе событий см. в разделе "Управление событиями".

См. также

Задачи

Основные понятия

Другие ресурсы