我正在尝试使用新的Windows 8.1 Point of Service API条形码扫描程序,如果我从以下任何位置拨打GetDefaultAsync()
,则会返回null
。
App.OnLaunched
.Loaded
OnNavigatedTo
这似乎不是DeviceCapabilities
或驱动程序的问题,因为如果我从以下地方调用它,它将完美运行:
Click
事件处理程序OnGotFocus
this.Dispatcher.RunIdleAsync(e =>
{
var res = await BarcodeScanner.GetDefaultAsync();
Assert(res != null);
});
这让我怀疑你必须专注于访问POS设备,以及构造函数等。在收到焦点之前被调用。
问题:是否有关于的指导,您可以致电GetDefaultAsync()
?
答案 0 :(得分:0)
松散地关注Microsoft Sample BarcodeScanner我在OnNavigatedTo
中连接条形码扫描器没有任何困难,尽管BarcodeScanner.GetDefaultAsync()
调用有点嵌套。
我在OnNavigatedTo
声明了扫描程序,因为此特定页面的要点是扫描条形码,如果由于某种原因未找到/声明扫描程序我想要预先出错,我不希望页面看起来和如果不是,我会感觉很有用,我不想强迫用户在发现条形码扫描器不工作之前尝试扫描。
我无法告诉您为什么在不查看更多代码的情况下,在您的特定情况下,在不同位置进行呼叫无效,但我建议您尝试以下操作。
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
在某些通话情况下无法工作。