Kommunizieren mit einem WIA-Gerät in mehreren Threads oder Anwendungen

Wenn ein Thread aktiv mit einem WIA-Gerät (Windows Image Acquisition) kommuniziert (z. B. übertragene Daten oder Schreiben von Geräteeigenschaften), "sperrt" WIA das Gerät. Wenn ein Gerät gesperrt ist, können keine anderen Threads oder Prozesse aktiv mit diesem Gerät kommunizieren.

WIA verhindert nicht, dass mehrere Threads oder Prozesse Verbindungen mit einem einzelnen Gerät aufrechterhalten. Das heißt, ein Gerät wird nur während der eigentlichen Kommunikation gesperrt, und für zwei oder mehr Anwendungen kann gleichzeitig ein einzelnes Gerät ausgewählt werden.

WIA erstellt jedes Mal eine separate Elementstruktur, wenn ein Thread oder eine Anwendung IWiaDevMgr::CreateDevice oder IWiaDevMgr2::CreateDevice aufruft, um eine Instanz dieses Geräts zu erstellen. WIA verwaltet separate Zustandsinformationen für jede Elementstruktur. Wenn ein Thread beispielsweise zwei Instanzen eines bestimmten Scanners erstellt, kann er unterschiedliche Scanauflösungen für die beiden Instanzen festlegen. Wenn IWiaDataTransfer::idtGetData für eine bestimmte Instanz aufgerufen wird, lädt WIA die eigenschaften, die dieser Instanz zugeordnet sind, auf das Gerät, bevor die eigentliche Überprüfung erfolgt. Dies wirkt sich nicht auf den Zustand der anderen Instanz des Geräts aus.

Wenn für einen Thread derzeit ein Gerät gesperrt ist (es kommuniziert aktiv mit diesem Gerät), und ein anderer Thread versucht, eine Methode auf aufruft, die aktiv mit dem Gerät kommuniziert, gibt die Methode einen WIA _ ERROR _ BUSY-Fehler zurück.

In der Regel dauert das Lesen und Schreiben von Geräteeigenschaften so wenig Zeit, dass diese Vorgänge selten einen Konflikt verursachen. Das Übertragen von Daten dauert jedoch in der Regel länger und führt daher eher zu Konflikten beim Gerätezugriff. Es handelt sich um eine solide Programmierung, um lange Gerätevorgänge (Datenübertragungen) gleichzeitig in separaten Threads innerhalb einer Anwendung zu vermeiden.

Eine Anwendung sollte nie davon ausgehen, dass sie die einzige Anwendung ist, die beim Starten mit einem WIA-Gerät kommuniziert.