我正在尝试使用新的Windows 8.1 服务点 API对于条形码扫描仪,如果我打电话GetDefaultAsync()从以下任何位置,它返回null
.
App.OnLaunched
- 第一页
.Loaded
- 第一页
OnNavigatedTo
- 第一页构造函数
这似乎不是问题DeviceCapabilities
或驱动程序,因为如果我从以下位置调用它,它将完美地工作:
- 一个按钮
Click
事件处理程序
- 第一页的
OnGotFocus
- 第一页的构造函数如果包含在:
this.Dispatcher.RunIdleAsync(e =>
{
var res = await BarcodeScanner.GetDefaultAsync();
Assert(res != null);
});
- 后续页面的构造函数
这让我怀疑您必须集中注意力才能访问 POS 设备和构造函数等。在收到焦点之前被调用。
问题:是否有已发布的指南when你可以打电话GetDefaultAsync()
?
松散地跟随Microsoft 示例条码扫描仪我在连接条形码扫描仪时没有遇到任何困难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
在某些通话情况下不起作用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)