c# - 如何在 UWP 中获取已连接的扫描仪列表
问题描述
我想获取连接的扫描仪列表(名称)并将扫描仪名称绑定到组合框,以进行扫描。我是 UWP 新手,请分享任何链接或代码。
我刚刚从 NuGet 包安装了 NTwain 库。
解决方案
我想在页面加载时将扫描仪名称绑定到组合框(通过创建 getScannerName 方法)怎么做?
根据您的要求,您可以使用DeviceWatcher
枚举所有ImageScanner
. 然后将结果绑定到ListView
. 更多细节可以参考DeviceEnumerationAndPairing官方代码示例场景 2。
private void StartWatcher()
{
startWatcherButton.IsEnabled = false;
ResultCollection.Clear();
// First get the device selector chosen by the UI.
DeviceSelectorInfo deviceSelectorInfo = (DeviceSelectorInfo)selectorComboBox.SelectedItem;
if (null == deviceSelectorInfo.Selector)
{
// If the a pre-canned device class selector was chosen, call the DeviceClass overload
deviceWatcher = DeviceInformation.CreateWatcher(deviceSelectorInfo.DeviceClassSelector);
}
else if (deviceSelectorInfo.Kind == DeviceInformationKind.Unknown)
{
// Use AQS string selector from dynamic call to a device api's GetDeviceSelector call
// Kind will be determined by the selector
deviceWatcher = DeviceInformation.CreateWatcher(
deviceSelectorInfo.Selector,
null // don't request additional properties for this sample
);
}
else
{
// Kind is specified in the selector info
deviceWatcher = DeviceInformation.CreateWatcher(
deviceSelectorInfo.Selector,
null, // don't request additional properties for this sample
deviceSelectorInfo.Kind);
}
// Hook up handlers for the watcher events before starting the watcher
handlerAdded = new TypedEventHandler<DeviceWatcher, DeviceInformation>(async (watcher, deviceInfo) =>
{
// Since we have the collection databound to a UI element, we need to update the collection on the UI thread.
await rootPage.Dispatcher.RunAsync(CoreDispatcherPriority.Low, () =>
{
ResultCollection.Add(new DeviceInformationDisplay(deviceInfo));
rootPage.NotifyUser(
String.Format("{0} devices found.", ResultCollection.Count),
NotifyType.StatusMessage);
});
});
deviceWatcher.Added += handlerAdded;
handlerUpdated = new TypedEventHandler<DeviceWatcher, DeviceInformationUpdate>(async (watcher, deviceInfoUpdate) =>
{
// Since we have the collection databound to a UI element, we need to update the collection on the UI thread.
await rootPage.Dispatcher.RunAsync(CoreDispatcherPriority.Low, () =>
{
// Find the corresponding updated DeviceInformation in the collection and pass the update object
// to the Update method of the existing DeviceInformation. This automatically updates the object
// for us.
foreach (DeviceInformationDisplay deviceInfoDisp in ResultCollection)
{
if (deviceInfoDisp.Id == deviceInfoUpdate.Id)
{
deviceInfoDisp.Update(deviceInfoUpdate);
break;
}
}
});
});
deviceWatcher.Updated += handlerUpdated;
handlerRemoved = new TypedEventHandler<DeviceWatcher, DeviceInformationUpdate>(async (watcher, deviceInfoUpdate) =>
{
// Since we have the collection databound to a UI element, we need to update the collection on the UI thread.
await rootPage.Dispatcher.RunAsync(CoreDispatcherPriority.Low, () =>
{
// Find the corresponding DeviceInformation in the collection and remove it
foreach (DeviceInformationDisplay deviceInfoDisp in ResultCollection)
{
if (deviceInfoDisp.Id == deviceInfoUpdate.Id)
{
ResultCollection.Remove(deviceInfoDisp);
break;
}
}
rootPage.NotifyUser(
String.Format("{0} devices found.", ResultCollection.Count),
NotifyType.StatusMessage);
});
});
deviceWatcher.Removed += handlerRemoved;
handlerEnumCompleted = new TypedEventHandler<DeviceWatcher, Object>(async (watcher, obj) =>
{
await rootPage.Dispatcher.RunAsync(CoreDispatcherPriority.Low, () =>
{
rootPage.NotifyUser(
String.Format("{0} devices found. Enumeration completed. Watching for updates...", ResultCollection.Count),
NotifyType.StatusMessage);
});
});
deviceWatcher.EnumerationCompleted += handlerEnumCompleted;
handlerStopped = new TypedEventHandler<DeviceWatcher, Object>(async (watcher, obj) =>
{
await rootPage.Dispatcher.RunAsync(CoreDispatcherPriority.Low, () =>
{
rootPage.NotifyUser(
String.Format("{0} devices found. Watcher {1}.",
ResultCollection.Count,
DeviceWatcherStatus.Aborted == watcher.Status ? "aborted" : "stopped"),
NotifyType.StatusMessage);
});
});
deviceWatcher.Stopped += handlerStopped;
rootPage.NotifyUser("Starting Watcher...", NotifyType.StatusMessage);
deviceWatcher.Start();
stopWatcherButton.IsEnabled = true;
}
推荐阅读
- python-3.x - pandas 组合成行的字符串
- java - 在 Nexus 存储库中找不到工件(快照)
- python - 仅在 Python 中签署肥皂附件内容
- python - 使用正则表达式从文本文件中查找特定字符串之前的单词
- ios - 我的 UIBarButtonItem 代码未执行,但所有内容都已正确链接
- excel - 当我添加一个额外的 'If Like Then' 条件时宏失败
- python - 如何在 Web 套接字中从服务器向客户端发送消息
- node.js - 在与 VUE 应用相同的服务器上访问 API
- python - Pygame:玩家精灵不正确地碰撞并剪入墙壁
- r - pivot_wider:等效于使用“unstack”的结果