鬆散地跟在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
會在某些通話情況下不工作。
當它是* first *頁面時,我只有'OnNavigatedTo'的問題。一旦該應用程序專注,它會正常工作。 – Mitch 2016-05-04 21:31:27
有趣的是,在這個問題上我找不到任何有關Microsoft知識庫的信息。我必須試一試,看看是否有什麼奇怪的事情發生,然後用我的發現回覆明天。 – JaredStroeb 2016-05-05 00:45:17
在我的應用程序的MainPage入口點的'OnNavigatedTo'中調用EnableScanner()可正常工作。在我的App.xaml'OnLaunched'內調用'BarcodeScanner.GetDefaultAsync()'時,我還收到了掃描器。我似乎無法重現您的錯誤。 – JaredStroeb 2016-05-05 13:03:56