次の方法で共有


店舗販売時点管理デバイスの要求とモデルの有効化

店舗販売時点管理デバイスの要求を使用して、API でのデバイスの要求と I/O 操作を有効にします。

排他的使用の要求

PointOfService デバイス オブジェクトを作成した後デバイスを入力または出力に使用するには、デバイスの種類に適した要求方法を使用して要求する必要があります。 要求は、1 つのアプリケーションが別のアプリケーションによるデバイスの使用を妨げないように、デバイスの機能の多くに対する排他的アクセス権をアプリケーションに付与します。 排他的に使用するために PointOfService デバイスを要求できるアプリケーションは一度に 1 つだけです。

Note

要求アクションを実行すると、デバイスに対して排他的ロックが確立されますが、動作状態にはなりません。 詳細については、「I/O 操作用にデバイスを有効にする」を参照してください。

要求およびリリースに使用される 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

デバイスで I/O 操作を有効にする

要求アクションは、デバイスに対する排他的権限を確立しますが、操作状態には設定しません。 イベントを受信または出力操作を実行するには、EnableAsync を使用して、デバイスを有効にする必要があります。 逆に、 DisableAsync を呼び出して、デバイスからのイベントのリッスンを停止したり、出力の実行を停止したりできます。 また、IsEnabled を使用して、デバイスの状態を確認することもできます。

有効化または無効に使用される API

デバイス 有効化 Disable IsEnabled?
ClaimedBarcodeScanner EnableAsync DisableAsync IsEnabled
ClaimedCashDrawer EnableAsync DisableAsync IsEnabled
ClaimedLineDisplay 適用外¹ 適用外¹ 適用外¹
ClaimedMagneticStripeReader EnableAsync DisableAsync IsEnabled
ClaimedPosPrinter EnableAsync DisableAsync IsEnabled

¹ LineDisplay の場合、デバイスで I/O 操作を明示的に有効にする必要はありません。 有効化は、I/O を実行する PointOfService LineDisplay API によって自動的に実行されます。

コード サンプル: 要求と有効化

このサンプルでは、バーコード スキャナー オブジェクトを正常に作成した後にバーコード スキャナー デバイスを要求する方法を示します。


    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. 別のアプリが同じデバイスの要求を要求しており、ReleaseDeviceRequested イベントに応答してアプリが RetainDevice を発行しませんでした。 ( を参照してください要求ネゴシエーション 詳細については、以下を参照してください)。
  2. アプリが一時停止されているため、デバイス オブジェクトが閉じられ、その結果、要求は無効になります。 ( を参照してくださいデバイス オブジェクトのライフサイクル 詳しくは、以下をご覧ください)。

要求ネゴシエーション

Windows はマルチタスク環境であるため、同じコンピューター上の複数のアプリケーションで、協調的に周辺機器へのアクセスを要求できます。 PointOfService API は、複数のアプリケーションがコンピューターに接続されている周辺機器を共有できるようにするネゴシエーション モデルを提供します。

同じコンピューター上の 2 つ目のアプリケーションが、別のアプリケーションによって既に要求されている 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