Какие части связи с TWAIN можно передать в другой поток, например, BackgroundWorker? Или: Можно ли разделить цикл, который обрабатывает передачу изображения?
Некоторые драйверы сканера сканируют все изображения перед возвратом в вызывающее приложение, что заставляет приложение обрабатывать все изображения сразу. Это приводит, например, к OutOfMemoryException или странному поведению в моем приложении WPF, когда внезапно все события (возникающие после каждого сканированного изображения) должны обрабатываться сразу. Кроме того, приложение зависает до завершения передачи.
Я использую TwainDotNet: http://code.google.com/p/twaindotnet/ , но я также ищу общее решение, описывающее фильтр сообщений и взаимодействие с TWAIN независимо от TwainDotNet. Подойдет рабочий процесс, содержащий сообщения TWAIN. Также приветствуются другие языки, предпочтительно что-то вроде C или Deplhi.
Я тестировал это с помощью нескольких сканеров:
Меня беспокоят не проблемы с отображением, а, скорее, заблокированное окно и проблемы с памятью. Включение цикла, который передает изображения в BackgroundWorker, вызвало несколько сбоев, которые я не смог отладить. Конечно, я рассмотрел проблемы многопоточности WPF. Я также не знаю, как разделить цикл передачи, чтобы после передачи одного изображения программа возвращалась к фильтру сообщений, и сообщение можно было пометить как обработанное.