2014-10-22 84 views
1

我想爲條形碼掃描儀使用新的Windows 8.1 Point of Service API,如果我從以下任何位置撥打GetDefaultAsync(),它將返回null什麼時候可以調用BarcodeScanner.GetDefaultAsync()?

  • App.OnLaunched
  • 第一頁.Loaded
  • 第一頁OnNavigatedTo
  • 第一頁構造

這似乎並不符合DeviceCapabilities或驅動程序的問題,因爲它將我完美的工作,如果我打電話給它:

  • A鍵Click事件處理程序
  • 第一頁的OnGotFocus
  • 第一頁的構造函數,如果包裹在:
    this.Dispatcher.RunIdleAsync(e => { var res = await BarcodeScanner.GetDefaultAsync(); Assert(res != null); });
  • 後續頁面的構造函數

這讓我懷疑,你必須有重點訪問POS設備和構造器等。在重點被接收之前被呼叫。

問:是否有發佈了指導,您可以撥打GetDefaultAsync()

回答

0

鬆散地跟在Microsoft Sample BarcodeScanner雖然BarcodeScanner.GetDefaultAsync()調用有點嵌套,但我沒有任何困難連接OnNavigatedTo中的條形碼掃描器。

我聲稱在OnNavigatedTo掃描儀,因爲這個特定頁面的目的是要掃描條形碼,如果沒有找到掃描儀/聲明出於某種原因我希望提前發生錯誤我不希望頁面看起來和感覺功能如果它不是,我不想強​​迫用戶在發現barcodescanner無法正常工作之前嘗試掃描。

我不能告訴你爲什麼在不同的位置調用不能在你的特定情況下工作沒有看到更多的代碼,但我建議嘗試以下操作。

protected override void OnNavigatedTo(NavigationEventArgs e) 
    { 
     EnableScanner(); 
    } 

private async void EnableScanner() 
    { 
     if (await CreateDefaultScannerObject()) 
     { 
      // after successful creation, claim the scanner for exclusive use and enable it so that data reveived events are received. 
      if (await ClaimScanner()) 
      { 
       Task<bool> AsyncSuccess = EnableClaimedScanner(); 
       bool x = await AsyncSuccess; 
       if (x) 
       { 
        HookUpEventsClaimedScanner(); 
       } 
      } 
     } 
    } 
     private async Task<bool> CreateDefaultScannerObject() 
    { 
     if (scanner == null) 
     { 
      UpdateOutput("Creating Barcode Scanner object."); 
      scanner = await BarcodeScanner.GetDefaultAsync(); 

      if (scanner != null) 
      { 
       UpdateOutput("Default Barcode Scanner created."); 
       UpdateOutput("Device Id is:" + scanner.DeviceId); 
      } 
      else 
      { 
       UpdateOutput("Barcode Scanner not found. Please connect a Barcode Scanner."); 
       return false; 
      } 
     } 
     return true; 
    } 

    private async Task<bool> EnableClaimedScanner() 
    { 
     bool result = false; 
     try 
     { 
      await claimedScanner.EnableAsync(); 
      if (claimedScanner.IsEnabled) 
      { 
       claimedScanner.IsDecodeDataEnabled = true; 
       UpdateOutput("ClaimedScanner is now Enabled."); 
       result = true; 
      } 
      else 
       UpdateOutput("ClaimedScanner wasn't Enabled."); 
     } 
     catch (Exception ex) 
     { 
      UpdateOutput(ex.Message); 
     } 
     return result; 
    } 

    public void HookUpEventsClaimedScanner() 
    { 
     claimedScanner.DataReceived += ScannerDataReceived; 
     claimedScanner.ReleaseDeviceRequested += ScannerReleaseRequest; 
    } 

編輯:我知道這個問題是一歲多,但我發現它在研究嵌入式條形碼掃描器我自己的Windows 8.1,所以我想確保它不會導致別人錯了路思GetDefaultAsync會在某些通話情況下不工作。

+0

當它是* first *頁面時,我只有'OnNavigatedTo'的問題。一旦該應用程序專注,它會正常工作。 – Mitch 2016-05-04 21:31:27

+0

有趣的是,在這個問題上我找不到任何有關Microsoft知識庫的信息。我必須試一試,看看是否有什麼奇怪的事情發生,然後用我的發現回覆明天。 – JaredStroeb 2016-05-05 00:45:17

+0

在我的應用程序的MainPage入口點的'OnNavigatedTo'中調用EnableScanner()可正常工作。在我的App.xaml'OnLaunched'內調用'BarcodeScanner.GetDefaultAsync()'時,我還收到了掃描器。我似乎無法重現您的錯誤。 – JaredStroeb 2016-05-05 13:03:56

相關問題