共用方式為


服務點設裝置宣告和啟用模型

使用服務點裝置宣告,並啟用 API 來宣告裝置,並啟用它們以進行 I/O 作業。

宣告供獨佔使用

建立 PointOfService 裝置物件後,必須使用裝置類型的適當宣告方法聲明它,然後才能使用該裝置進行輸入或輸出。 宣告會授予應用程式對許多裝置功能的獨佔存取權限,以確保一個應用程式不會干=擾另一個應用程式對裝置的使用。 一次只有一個應用程式可以宣告 PointOfService 裝置供獨佔使用。

注意

聲明操作會建立裝置的獨佔鎖定,但不會將其置於操作狀態。 如需詳細資訊,請參閱啟用裝置以進行 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

裝置 啟用 停用 IsEnabled?
ClaimedBarcodeScanner EnableAsync DisableAsync IsEnabled
ClaimedCashDrawer EnableAsync DisableAsync IsEnabled
ClaimedLineDisplay 不適用 不適用 不適用
ClaimedMagneticStripeReader EnableAsync DisableAsync IsEnabled
ClaimedPosPrinter EnableAsync DisableAsync IsEnabled

1 線路顯示不需要您明確啟用裝置進行 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. 另一個應用程式已要求宣告相同的裝置,且您的應用程式未發出 RetainDevice 以回應 ReleaseDeviceRequested 事件。 (請參閱如需詳細資訊,請於下方進行宣告交涉。)
  2. 您的應用程式已暫停,導致裝置物件關閉,因此宣告不再有效。 (請參閱裝置物件生命週期,了解更多資訊。)

宣告交涉

由於 Windows 是多工作環境,因此同一部電腦上的多個應用程式可以合作方式要求存取周邊。 PointOfService API 提供交涉模型,可讓多個應用程式共用連線到計算機的周邊。

當相同電腦上的第二個應用程式要求已由另一個應用程式宣告的 PointOfService 周邊宣告時,會發佈 ReleaseDeviceRequested 事件通知。 具有作用中宣告的應用程式必須藉由呼叫 RetainDevice 來回應事件通知,如果應用程式目前使用裝置以避免遺失宣告。

如果具有作用中宣告的應用程式未立即回應 RetainDevice,則假設應用程式已暫停或不需要裝置,且宣告已撤銷並提供給新的應用程式。

第一個步驟是建立事件處理常式,以使用 RetainDevice 回應ReleaseDeviceRequested 事件。

    /// <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