我目前正在开发一个模块,用户可以在其中扫描文档并保存它们。目前,正在使用的工作代码来自Jeske,来自GitHub(链接在这里)。客户使用的扫描仪是:爱普生完美V600。前面提到的代码就像一个魅力,预计会出现1种情况:如果扫描仪进入睡眠/非活动模式,并且用户尝试在该状态下扫描文档,则应用程序将在等待扫描仪响应时自行冻结(有时它确实如此,有时它没有)。确切地说,程序冻结在此特定行:WIA.ImageFile image = (WIA.ImageFile)wiaCommonDialog.ShowTransfer(item, wiaFormatBMP, false);我的问题是:有没有办法防止应用程序在尝试从给定的扫描仪扫描时冻结?(仅当扫描仪处于睡眠/非活动模式时,才会发生此问题)
1 回答
萧十郎
TA贡献1815条经验 获得超13个赞
您可以使用并发来防止阻塞。如果每当操作未结束时,您也可以将 CancelToken 与 CancelTokenSource 一起使用,则可以向您的功能发送取消信号,以便中止扫描操作。
public Task Scan()
{
....
WIA.ImageFile image = (WIA.ImageFile)wiaCommonDialog.ShowTransfer(item, wiaFormatBMP, false);
...
}
然后在您的主程序中
//wait 20 seconds before cancellation
CancellationTokenSource cts= new CancellationTokenSource(20000);
var myTask = Task.Run(() => Scan(), cts.Token);
await myTask;
- 1 回答
- 0 关注
- 108 浏览
添加回答
举报
0/150
提交
取消
