Które części komunikacji z TWAIN można umieścić w innym wątku, np. a BackgroundWorker? Lub: Czy można podzielić pętlę, która obsługuje przesyłanie obrazów?Jak skanować i przesyłać obrazy z podajnika dokumentów asynchronicznie?
Niektóre sterowniki skanera skanują wszystkie obrazy przed powrotem do aplikacji wywołującej, która wymusza na aplikacji obsługę wszystkich obrazów naraz. Powoduje to np. OutOfMemoryException lub dziwne zachowanie w mojej aplikacji WPF, gdy nagle wszystkie zdarzenia (wywołane po każdym zeskanowanym obrazie) muszą być obsługiwane jednocześnie. Dodatkowo aplikacja zawiesza się do momentu zakończenia transferu.
Używam TwainDotNet: http://code.google.com/p/twaindotnet/, ale szukam również ogólnego rozwiązania opisującego filtr wiadomości i interakcję z TWAIN niezależnym od TwainDotNet. Przepływ pracy zawierający komunikaty TWAIN byłby wystarczający. Inne języki są również mile widziane, preferowane jest coś takiego jak C lub Deplhi.
Obecna implementacja filtru wiadomości w DataSourceManager można opisać w następujący sposób:
- Get Info wiadomości z uchwytu okna (HWND)
- filtra komplikować, wysyłać rzeczy do TWAIN itp
- jeśli komunikat blisko (np po naciśnięciu przycisku anuluj w TWAIN UI)
- źródło zbliżone dane
- Wyłącz filtr
- połączeń wydarzenie ScanningComplete
- jeśli przelew wiadomość gotowe:
- w pętli (do automatycznego podajnika dokumentów jest pusta itd., To blokuje filtr wiadomości)
-
- Get image
-
- Konwersja wskaźnika obrazu na obraz GDI +
-
- połączeń wydarzenie TransferImage z obrazem jako parametr
- przeniesienie reset
- Blisko źródła danych itp (tak samo jak wiadomości zamknij)
- Zawiadom okna, że wiadomość ma został obsłużony
Testowałem to z sever Skanery al:
- Fujitsu fi-5120C wywołuje zdarzenie TransferImage za każdym razem, gdy strona została przesłana. Obraz pojawia się natychmiast na liście obrazów w mojej aplikacji WPF.
- Canon DR-5010C blokuje moją aplikację WPF, dopóki wszystkie obrazy nie zostaną zeskanowane (do zakończenia pętli). Windows nawet mówi, że aplikacja WPF nie odpowiada.Po przeniesieniu wszystkich obrazów wyświetlanych jest tylko kilka zdjęć, a wybór na liście obrazów migocze, itp.
Nie przejmuję się problemami z wyświetlaniem, ale raczej blokowaniem okna i problemami z pamięcią. Umieszczenie pętli, która przenosi obrazy do BackgroundWorker, spowodowało kilka awarii, których nie mogłem debugować. Z tego powodu zastanawiałem się nad wątkami WPF. Nie wiem również, jak podzielić pętlę transferu, tak aby po przeniesieniu jednego obrazu program powrócił do filtra wiadomości, a wiadomość może zostać oznaczona jako obsługiwana.
Czy zastanawiałeś się nad zapytaniem grupy programistów TwaindotNet? [Http://groups.google.com/group/twaindotnet-devs?pli=1](http://groups.google.com/group/twaindotnet-devs?pli=1) – ascarb
szukam rodzajowe rozwiązanie opisujące filtr wiadomości i interakcja z TWAIN niezależnym od TwainDotNet. Przepływ pracy zawierający komunikaty TWAIN byłby wystarczający. Inne języki są również mile widziane, preferowane jest coś takiego jak C lub Deplhi. –