【发布时间】:2014-11-04 14:03:12
【问题描述】:
我正在使用以下代码扫描文档:
Dim manager = New DeviceManager
Dim deviceinfo = manager.DeviceInfos.Cast(Of DeviceInfo)().FirstOrDefault(Function(di) di.Properties("Name").Value = deviceName)
If deviceinfo Is Nothing Then Exit Sub
Dim device As Device = deviceinfo.Connect
Dim dlg = New CommonDialog
Dim Item As Item = device.Items(1)
Item.Properties("Bits Per Pixel").Value = 1
Item.Properties("Horizontal Resolution").Value = 200
Item.Properties("Vertical Resolution").Value = 200
Dim img As ImageFile = dlg.ShowTransfer(Item, FormatID.wiaFormatTIFF, False)
在最后一行,我收到 2 个不同的错误代码。有时我会收到0x8021000E,根据this 页面,这意味着WIA_ERROR_EXCEPTION_IN_DRIVER 错误。
有时我得到 COMException The remote procedure call failed 0x800706BE
根据this页面,驱动程序错误默认记录到%windir%\wiadebug.log,但我没有在那里找到任何日志文件。我确实在%windir%\debug\wiatrace.log 找到了一个似乎包含此信息的文件。但它并没有给我任何比实际错误更多的信息。
程序在 Windows 7 Professional 64 位上运行。 WIA 服务正在运行。
我可以采取哪些步骤来解决此问题?
【问题讨论】:
-
请确保您在其上运行的线程是 STA 线程,即您在 WPF 或 Winforms 应用程序中获得的那种。除此之外,从设备制造商处获取驱动程序更新是避免这种情况的唯一希望。
-
另外,检查参数并确保 (1) 所有参数都对您的设备有效,并且 (2) 您不必初始化任何您不是的参数。有些设备不遵守规则。
-
@HansPassant 我最初是使用 Task.Run 完成一项任务。现在我同步运行它,我一直得到 COMException。
-
@xpda 如何验证我需要初始化什么以及是否支持这些属性?