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


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

Используйте утверждение устройства point of Service и включите 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 СохранитьDevice
ClaimedCashDrawer ReleaseDeviceRequested СохранитьDevice
ClaimedLineDisplay ReleaseDeviceRequested СохранитьDevice
ClaimedMagneticStripeReader ReleaseDeviceRequested СохранитьDevice
ClaimedPosPrinter ReleaseDeviceRequested СохранитьDevice