Est-ce que quelqu'un a essayé TwainDotNet pour numériser avec des appels d'API TWAIN à partir de .NET? Bien que cela fonctionne bien, j'ai quelques problèmes avec l'application WPF utilisant MVVM. Fondamentalement, j'appelle les fonctions de numérisation Twain à partir d'un service, qui à son tour utilise un BackgroundWorker.Numérisation TwainDotNet à l'aide de TWAIN avec BackgroundWorker
List<BitmapSource> bitmapSources = new List<BitmapSource>();
Twain twain = new Twain(new WpfWindowMessageHook(_window));
ScanSettings settings = new ScanSettings() { ShowTwainUI = false };
using (BackgroundWorker worker = new BackgroundWorker())
{
worker.DoWork += (sndr, evnt) =>
{
AutoResetEvent waitHandle = new AutoResetEvent(false);
EventHandler scanCompleteHandler = (se, ev) => { waitHandle.Set(); };
twain.ScanningComplete += scanCompleteHandler;
twain.StartScanning(settings);
waitHandle.WaitOne();
if (twain.Images.Count > 0)
{
foreach (var image in twain.Images)
{
BitmapSource bitmapSource = Imaging.CreateBitmapSourceFromHBitmap(new Bitmap(image).GetHbitmap(),
IntPtr.Zero, Int32Rect.Empty, System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
bitmapSources.Add(bitmapSource);
}
}
};
worker.RunWorkerCompleted += (sndr, evnt) => { image1.Source = bitmapSources[0]; };
worker.RunWorkerAsync();
}
Le gestionnaire d'événements ScanningComplete n'est jamais déclenché lorsque nous travaillons avec BackgroundWorker. Des suggestions pour résoudre ce problème?
Raj, j'ai téléchargé votre exemple de projet à partir de la page google TwainDotNet Issues. Je veux faire la même chose avec l'arrière-plan parce que je veux montrer le progrès/état sur la fenêtre pendant la numérisation. J'ai le même problème avec l'accès aux images. cependant, je ne peux pas non plus obtenir la fenêtre pour répondre lors de la numérisation dans l'arrière-plan. avez-vous pu obtenir la fenêtre pour mettre à jour/répondre pendant que vous numérisez avec cette solution? SVP faites le moi savoir. – Dave
Dave, la solution d'échantillon devrait le faire correctement? – Raj
Non .. Je souhaite placer une barre de progression sur la fenêtre et afficher des commentaires. DoWork est en train de traiter l'analyse. Donc, j'ai besoin d'un autre fil pour signaler les progrès. J'ai lancé un DispatcherTimer et appelez: Dispatcher.Invoke (updatePbDelegate, System.Windows.Threading.DispatcherPriority.Background, nouvel objet [] {ProgressBar.ValueProperty, progressBarValue}); mais les événements pour mettre à jour la barre de progression ne se déclenchent qu'après la fin de l'analyse. Si vous avez une autre idée, s'il vous plaît faites le moi savoir. – Dave