C# - 如何暂停程序,直到图像文件被覆盖完成
本文关键字:图像 文件 覆盖 程序 何暂停 暂停 | 更新日期: 2023-09-27 18:32:01
在我的程序中,有一个过程是这样的:
保存图像(覆盖现有图像) -> 在此图像上运行OCR -> 返回字符串结果
这个过程可以连续重复几次,如果没有Thread.Sleep()
,它会导致:
第一次迭代:保存 img01 -> 在 img01 上运行 OCR -> 返回 img01 的结果
第二次迭代:保存 img02 以替换 img01 -> 仍然在 img01 上运行 OCR(旧 img) -> 返回 img01 的结果(旧结果)
(img01 和 img02 共享相同的文件名/路径)
<小时 />由于流程中没有暂停,因此我注意到 OCR 将在img01
而不是img02
上进行,因为img02
仍在保存。
我目前的 PC 工作方式不可靠,只是在保存图像和运行 OCR 之间Thread.Sleep(1000)
。但是我可以想象这不是正确的解决方案,因为不同的计算机需要不同的时间来保存图像,对吗?
如何使程序动态暂停并等待图像被完全覆盖,然后再继续下一步?
一种方法是这样的:
首先,您应该检查img02
是否存在以及该文件是否正在使用中。
为了检查img02
是否存在,您可以执行以下操作:File.Exists(path)
然后检查文件是否正在使用中,如下所示:
protected virtual bool IsFileLocked(FileInfo file)
{
FileStream stream = null;
try
{
stream = file.Open(FileMode.Open, FileAccess.Read, FileShare.None);
}
catch (IOException)
{
//the file is unavailable because it is:
//still being written to
//or being processed by another thread
//or does not exist (has already been processed)
return true;
}
finally
{
if (stream != null)
stream.Close();
}
//file is not locked
return false;
}
如果该文件未在使用中,则可以继续执行下一步。