KOFAX驱动KER_UNDERRUN错误和解决方案

最近使用TWAIN协议调用使用KOFAX驱动的扫描仪,主线程内同步调用完全没有问题,在异步扫描的时候很诡异得报错KER_UNDERRUN。在谷歌上搜索只能搜索到这个问题的前半部分KER_可是后面的UNDERRUN却没有任何结果。由于我封装好了一个与扫描仪通信的类,对于这个问题一开始完全没有头绪,可是经过替换排除法我发现了问题的所在。首先说一些结论,这个问题我至今无法在那个扫描程序中解决。

问题出现在我扫描程序提供的一个小功能。在扫描之前,我的扫描程序支持读取数据(扫描仪支持纸张类型和颜色等等)然后展示给用户。只要是进行了这个操作,之后在另一个线程扫描就有几乎90%的可能性出现KER_UNDERRUN错误。即使我在卸载了DLL再重新载入也无法修复这个问题。最后就是取消了在该程序主线程中执行OpenSource这个行为,完全在另一个线程做所有的事情。

不过我还是不想取消这个功能,跨线程读取扫描仪配置然后和主线程通信又很麻烦,于是在我们架构师的建议下找到了一个解决方案:写了另外一个小程序,在用户选择完扫描仪后会被调用,它会读取扫描仪信息然后存在本地,然后主程序等待它执行完后读取那个文件就可以获得全套信息了。因为是在另外一个程序中调用OpenSource,而且执行后另外一个程序会销毁,所以不会影响主程序的行动。这个问题就完美解决了。

Leave a Reply

Your email address will not be published. Required fields are marked *