This project has moved. For the latest updates, please go here.

Проблемы при закрыти

Jul 17, 2015 at 8:48 AM
здравствуйте,
у меня такая проблема,
дело в том что twain у вас нужно держать в памяти открытым, так она работает, но при этом нельзя уже запустить на этом компьютере еще раз эту же программу. так как будет ругаться на то что занят сканер. по этому я сделал примерно так
private void button1_Click(object sender, EventArgs e) {
        using(var twain = new Twain32()) {
            twain.OpenDSM();
            twain.Acquire();
        }
    }
но тут выходит ошибка после закрытия на Dispose() - "DG DAT MSG out of expected sequence."
помогите пжлста в чем дело.

спасибо.
Coordinator
Jul 17, 2015 at 6:29 PM
Добрый день, nurlan.
Ну начнем с того что это не у меня twain нужно держать в памяти открытым, так в спецификации определено и так работаю все без исключения TWAIN-приложения. Эту же программу можно запустить на этом компьютере неограниченное число раз, но работать придётся с различными сканерами. То что с одним сканером нельзя работать одновременно нескольким приложениям, является ограничением драйвера сканера, т.е. если бы драйвер сканера позволял совместно работать нескольким приложения, то они бы так и работали.
В Вашем примере есть одна существенная ошибка: метод Twain32.Acquire() работает асинхронно (только в размещенных средах он работает синхронно, т.е. в приложениях у которых отсутствует цикл обработки сообщений), Поэтому метод Dispose(), в Вашем случае, вызывается непосредственно в процессе сканирования, что и приводит к ошибке. Лучше вызывать метод Twain32.CloseDataSource() (вместо Dispose()) из обработчика события Twain32.AcquireCompleted.
Marked as answer by SARAFF on 7/31/2015 at 12:24 PM
Jul 22, 2015 at 3:51 AM
Да я знаю что одновременно нельзя пользоваться одним сканером, но можно как то в разное время пользоваться одним сканером при этом не закрываю программу?
программа 1 сканирует и после завершения сканирования программа 2 тоже начинает сканировать но не закрывая программу 1. для этого мне нужно в программе 1 полностью отвязаться от сканера, что нужно для этого сделать? при Dispose() выходит ошибка - "DG DAT MSG out of expected sequence."

спасибо.
Coordinator
Jul 22, 2015 at 4:57 PM
Добрый день, nurlan.
SARAFF wrote:
Лучше вызывать метод Twain32.CloseDataSource() (вместо Dispose()) из обработчика события Twain32.AcquireCompleted.
Aug 4, 2015 at 4:05 AM
Привет,
тут возникли другие ошибки, помогите пжлста, при каждом сканировании память увеличивается и не очищается, в конце выходит ошибка Не достаточно памяти (-4500). как чистить память?

Спасибо.
Coordinator
Aug 4, 2015 at 5:38 PM
Добрый день.
Ну судя по всему недостаточно памяти, т.е. изображение очень большое или их много в памяти. Я полагаю, что эта проблема решается радикально путем сканирования в память или в файл. Смотри документацию, ну или вот здесь еще можно.