У меня есть программа C#, которая использует TwainDotNet для сканирования и получения изображений со сканера Fujitsu. У меня есть рабочий код, но я хочу выполнять сканирование и передачу изображений асинхронно, потому что графический интерфейс зависает до завершения процесса сканирования.
Я попытался следовать рекомендациям из это сообщение принятое решение с использованием этого кода:
public void StartScanning()
{
// Run the scanner from a separate thread
Task.Run(() => ScanThread());
}
private void ScanThread()
{
// Instantiate the Twain object and hookup event handlers
Twain twain = new Twain(new WinFormsWindowMessageHook(new Form()));
twain.TransferImage += Twain_TransferImage;
twain.ScanningComplete += Twain_ScanningComplete;
// Start the scanning process by passing along pre-defined scan settings
twain.StartScanning(GetScanSettings());
}
Код внутри ScanThread()
технически правильный, потому что он работает вне вызова Task.Run()
(это означает, что он нормально работает в потоке графического интерфейса). Однако ScanThread()
не работает, если вызывается из нового потока. Аппаратное обеспечение сканера никогда не начинает сканировать изображения, не говоря уже о их передаче.
Кто-нибудь знает конкретный способ асинхронного сканирования и передачи изображений с помощью TWAIN?