Поделиться через


Утверждение и включение модели устройства точки обслуживания

Используйте утверждение устройства точки обслуживания и включите API для утверждения устройств и включения их для операций ввода-вывода.

Утверждение для монопольного использования

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

Примечание

Действие утверждения устанавливает монопольную блокировку устройства, но не переводит его в рабочее состояние. Дополнительные сведения см. в статье Включение устройств для операций ввода-вывода .

API- интерфейсы, используемые для утверждения и выпуска

Устройство Утверждение Выпуск
BarcodeScanner BarcodeScanner.ClaimScannerAsync ClaimedBarcodeScanner.Close
CashDrawer CashDrawer.ClaimDrawerAsync ClaimedCashDrawer.Close
LineDisplay LineDisplay.ClaimAsync ClaimedineDisplay.Close
MagneticStripeReader MagneticStripeReader.ClaimReaderAsync ClaimedMagneticStripeReader.Close
PosPrinter PosPrinter.ClaimPrinterAsync ClaimedPosPrinter.Close

Включение устройств для операций ввода-вывода

Иск претензии устанавливает монопольные права на устройство, но не переводит его в рабочее состояние. Чтобы получать события или выполнять какие-либо операции вывода, необходимо включить устройство с помощью EnableAsync. И наоборот, вы можете вызвать DisableAsync , чтобы прекратить прослушивание событий с устройства или прекратить выполнение выходных данных. Вы также можете использовать IsEnabled для определения состояния устройства.

Используемые API: включение и отключение

Устройство Включить Отключить Isenabled?
ClaimedBarcodeScanner EnableAsync DisableAsync IsEnabled
ClaimedCashDrawer EnableAsync DisableAsync IsEnabled
ClaimedLineDisplay Неприменимо ¹ Неприменимо ¹ Неприменимо ¹
ClaimedMagneticStripeReader EnableAsync DisableAsync IsEnabled
ClaimedPosPrinter EnableAsync DisableAsync IsEnabled

¹ Для отображения строки не требуется явное включение устройства для операций ввода-вывода. Включение выполняется автоматически API PointOfService LineDisplay, которые выполняют операции ввода-вывода.

Пример кода: утверждение и включение

В этом примере показано, как присвоить устройство со сканером штрихкодов после создания объекта сканера штрихкодов.


    BarcodeScanner barcodeScanner = await BarcodeScanner.FromIdAsync(DeviceId);

    if(barcodeScanner != null)
    {
        // after successful creation, claim the scanner for exclusive use 
        claimedBarcodeScanner = await barcodeScanner.ClaimScannerAsync();

        if(claimedBarcodeScanner != null)
        {
            // after successful claim, enable scanner for data events to fire
            await claimedBarcodeScanner.EnableAsync();
        }
        else
        {
            Debug.WriteLine("Failure to claim barcodeScanner");
        }
    }
    else
    {
        Debug.WriteLine("Failure to create barcodeScanner object");
    }
    

Предупреждение

Присвоение может быть утеряно при следующих условиях.

  1. Другое приложение запросило присвоение этого же устройства, а ваше приложение не выдало RetainDevice в ответ на событие ReleaseDeviceRequested. (Дополнительные сведения см. в разделе Согласование присвоения.)
  2. Приложение было приостановлено, что привело к закрытию объекта устройства, и в результате присвоение стало недействительным. (Дополнительные сведения см. в разделе Жизненный цикл объекта устройства.)

Согласование присвоения

Так как Windows является многозадачной средой, для нескольких приложений на одном компьютере может потребоваться совместный доступ к периферийным устройствам. API-интерфейсы PointOfService предоставляют модель согласования, которая позволяет нескольким приложениям совместно использовать периферийные устройства, подключенные к компьютеру.

Когда второе приложение на одном и том же компьютере запрашивает присвоение для периферийного устройства PointOfService, которое уже присвоено другим приложением, публикуется уведомление о событии ReleaseDeviceRequested. Приложение с активным присвоением должно ответить на уведомление о событии, вызвав метод RetainDevice, если приложение в настоящий момент использует устройство во избежание потери присвоения.

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

Первым шагом является создание обработчика событий, который отвечает на событие ReleaseDeviceRequested с помощью RetainDevice.

    /// <summary>
    /// Event handler for the ReleaseDeviceRequested event which occurs when 
    /// the claimed barcode scanner receives a Claim request from another application
    /// </summary>
    void claimedBarcodeScanner_ReleaseDeviceRequested(object sender, ClaimedBarcodeScanner myScanner)
    {
        // Retain exclusive access to the device
        myScanner.RetainDevice();
    }

Затем зарегистрируйте обработчик событий в связи с запрошенным устройством.

    BarcodeScanner barcodeScanner = await BarcodeScanner.FromIdAsync(DeviceId);

    if(barcodeScanner != null)
    {
        // after successful creation, claim the scanner for exclusive use 
        claimedBarcodeScanner = await barcodeScanner.ClaimScannerAsync();

        if(claimedBarcodeScanner != null)
        {
            // register a release request handler to prevent loss of scanner during active use
            claimedBarcodeScanner.ReleaseDeviceRequested += claimedBarcodeScanner_ReleaseDeviceRequested;

            // after successful claim, enable scanner for data events to fire
            await claimedBarcodeScanner.EnableAsync();          
        }
        else
        {
            Debug.WriteLine("Failure to claim barcodeScanner");
        }
    }
    else
    {
        Debug.WriteLine("Failure to create barcodeScanner object");
    }

API-интерфейсы, используемые для согласования присвоения

Присвоенное устройство Уведомление о выпуске Удержание устройства
ClaimedBarcodeScanner ReleaseDeviceRequested RetainDevice
ClaimedCashDrawer ReleaseDeviceRequested RetainDevice
ClaimedLineDisplay ReleaseDeviceRequested RetainDevice
ClaimedMagneticStripeReader ReleaseDeviceRequested RetainDevice
ClaimedPosPrinter ReleaseDeviceRequested RetainDevice