在多个线程或应用程序中与 WIA 设备通信

例如,当线程主动与 Windows 映像采集 (WIA) 设备 (通信时,传输数据或写入设备属性) WIA 会“锁定”设备。 锁定设备后,其他线程或进程无法主动与该设备通信。

WIA 不禁止多个线程或进程维护与单个设备的连接。 也就是说,设备仅在实际通信期间锁定,并且两个或多个应用程序可以同时选择单个设备。

每当任何线程或应用程序调用 IWiaDevMgr::CreateDeviceIWiaDevMgr2::CreateDevice 以创建该设备的实例时,WIA 都会创建一个单独的项树。 WIA 为每个项树维护单独的状态信息。 例如,如果线程创建特定扫描程序的两个实例,它可以为这两个实例设置不同的扫描分辨率。 在特定实例上调用 IWiaDataTransfer::idtGetData 时,WIA 会在进行实际扫描之前将与该实例关联的属性加载到设备。 这不会影响设备的其他实例的状态。

如果线程当前锁定了设备 (它正在主动与该设备通信) 另一个线程尝试调用主动与设备通信的方法,则该方法将返回WIA_ERROR_BUSY错误。

通常,读取和写入设备属性所需的时间非常少,以至于这些操作很少导致冲突。 但是,传输数据通常需要更长的时间,因此更有可能造成设备访问冲突。 这是合理的编程,以避免长时间的设备操作 (数据传输) 在应用程序中的单独线程中并发。

应用程序绝不应假定它是唯一在启动时与 WIA 设备通信的应用程序。