hello friends i am new in uwp.
i want to scan a document. i am installed the NTwain 3.6.0 Package from NuGet. now my question is how to get the scanner list and scan the document.
What I have tried:
dont know..................................................... public DeviceWatcherHelper( ObservableCollection<DeviceInformationDisplay> resultCollection, CoreDispatcher dispatcher) this .resultCollection = resultCollection; this .dispatcher = dispatcher; public delegate void DeviceChangedHandler(DeviceWatcher deviceWatcher, string id); public event DeviceChangedHandler DeviceChanged; public DeviceWatcher DeviceWatcher => deviceWatcher; public bool UpdateStatus = true ; public void StartWatcher(DeviceWatcher deviceWatcher) this .deviceWatcher = deviceWatcher; // Connect events to update our collection as the watcher report results. deviceWatcher.Added += Watcher_DeviceAdded; deviceWatcher.Updated += Watcher_DeviceUpdated; deviceWatcher.Removed += Watcher_DeviceRemoved; // deviceWatcher.EnumerationCompleted += Watcher_EnumerationCompleted; // deviceWatcher.Stopped += Watcher_Stopped; deviceWatcher.Start(); public void StopWatcher() // Since the device watcher runs in the background, it is possible that // a notification is "in flight" at the time we stop the watcher. // In other words, it is possible for the watcher to become stopped while a // handler is running, or for a handler to run after the watcher has stopped. if (IsWatcherStarted(deviceWatcher)) // We do not null out the deviceWatcher yet because we want to receive // the Stopped event. deviceWatcher.Stop(); public void Reset() if (deviceWatcher != null ) StopWatcher(); deviceWatcher = null ; DeviceWatcher deviceWatcher = null ; ObservableCollection<DeviceInformationDisplay> resultCollection; CoreDispatcher dispatcher; static bool IsWatcherStarted(DeviceWatcher watcher) return (watcher.Status == DeviceWatcherStatus.Started) || (watcher.Status == DeviceWatcherStatus.EnumerationCompleted); public bool IsWatcherRunning() if (deviceWatcher == null ) return false ; DeviceWatcherStatus status = deviceWatcher.Status; return (status == DeviceWatcherStatus.Started) || (status == DeviceWatcherStatus.EnumerationCompleted) || (status == DeviceWatcherStatus.Stopping); private async void Watcher_DeviceAdded(DeviceWatcher sender, DeviceInformation deviceInfo) // Since we have the collection databound to a UI element, we need to update the collection on the UI thread. await dispatcher.RunAsync(CoreDispatcherPriority.Low, () => // Watcher may have stopped while we were waiting for our chance to run. if (IsWatcherStarted(sender)) resultCollection.Add( new DeviceInformationDisplay(deviceInfo )); // RaiseDeviceChanged(sender, deviceInfo.Id); private async void Watcher_DeviceUpdated(DeviceWatcher sender, DeviceInformationUpdate deviceInfoUpdate) // Since we have the collection databound to a UI element, we need to update the collection on the UI thread. await dispatcher.RunAsync(CoreDispatcherPriority.Low, () => // Watcher may have stopped while we were waiting for our chance to run. if (IsWatcherStarted(sender)) // 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); // RaiseDeviceChanged(sender, deviceInfoUpdate.Id); break ; private async void Watcher_DeviceRemoved(DeviceWatcher sender, DeviceInformationUpdate deviceInfoUpdate) // Since we have the collection databound to a UI element, we need to update the collection on the UI thread. await dispatcher.RunAsync(CoreDispatcherPriority.Low, () => // Watcher may have stopped while we were waiting for our chance to run. if (IsWatcherStarted(sender)) // Find the corresponding DeviceInformation in the collection and remove it foreach (DeviceInformationDisplay deviceInfoDisp in resultCollection) if (deviceInfoDisp.Id == deviceInfoUpdate.Id) resultCollection.Remove(deviceInfoDisp); break ; // RaiseDeviceChanged(sender, deviceInfoUpdate.Id); private async void Watcher_EnumerationCompleted(DeviceWatcher sender, object obj) await dispatcher.RunAsync(CoreDispatcherPriority.Low, () => // RaiseDeviceChanged(sender, string.Empty); private async void Watcher_Stopped(DeviceWatcher sender, object obj) await dispatcher.RunAsync(CoreDispatcherPriority.Low, () => // RaiseDeviceChanged(sender, string.Empty); on Scan Document Page XAML code :
<Border extensions:Mouse.Cursor= " Hand" Margin= " 42,10,76,0" BorderThickness= " 1" BorderBrush= " #E1E1E1" CornerRadius= " 5" VerticalAlignment= " Stretch" > <ComboBox Padding= " 5 0 0 0" Name= " CmbScannerList" extensions:Mouse.Cursor= " Hand" SelectedValuePath= " rid" BorderBrush= " Transparent" BorderThickness= " 0" FontSize= " 13" FontWeight= " Light" FontFamily= " {StaticResource inventoryRegularFont}" TabIndex= " 8" Header= " " PlaceholderForeground= " #414042" PlaceholderText= " Connected Devices List " HorizontalAlignment= " Left" VerticalAlignment= " Top" Margin= " 0,-1,0,0" Width= " 532" Height= " 57" > <ComboBox.ItemTemplate> <DataTemplate x:DataType= " local:DeviceInformationDisplay" > <TextBlock Name= " {x:Bind Id }" Text= " {x:Bind Name }" /> </ DataTemplate > </ ComboBox.ItemTemplate > </ ComboBox > </ Border > scan document page code behind:
public sealed partial class ScanDocumentPage : Page private DeviceWatcherHelper deviceWatcherHelper; private ObservableCollection<DeviceInformationDisplay> resultCollection = new ObservableCollection<DeviceInformationDisplay>(); public ScanDocumentPage() this .InitializeComponent(); deviceWatcherHelper = new DeviceWatcherHelper(resultCollection, Dispatcher); StartWatcher(); private void StartWatcher() resultCollection.Clear(); DeviceWatcher deviceWatcher; deviceWatcher = DeviceInformation.CreateWatcher(DeviceClass.All ); // here you can set the All or ImageScanner or Audiodevices deviceWatcherHelper.StartWatcher(deviceWatcher); protected override void OnNavigatedTo(NavigationEventArgs e) CmbScannerList.ItemsSource = resultCollection; // here you can bind the devices list.
  • Read the question carefully.
  • Understand that English isn't everyone's first language so be lenient of bad spelling and grammar.
  • If a question is poorly phrased then either ask for clarification, ignore it, or edit the question and fix the problem. Insults are not welcome.
  • Don't tell someone to read the manual. Chances are they have and don't get it. Provide an answer or move on to the next question. Let's work to help developers, not make them feel stupid.
  •