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)。但是我可以想象这不是正确的解决方案,因为不同的计算机需要不同的时间来保存图像,对吗?

如何使程序动态暂停并等待图像被完全覆盖,然后再继续下一步?

C# - 如何暂停程序,直到图像文件被覆盖完成

一种方法是这样的:

首先,您应该检查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;
}

如果该文件未在使用中,则可以继续执行下一步。