-1

我目前正在用 C# 编写一个小应用程序来处理批量图像并将它们放入 PDF 中。每批图像都存储在网络共享上自己的文件夹中。该应用程序将使用户能够在创建 PDF 之前对来自单个批次的随机数量的图像执行 QA 检查。最多有 4 到 6 个用户在单个桌面上运行此应用程序,并可以访问存储图像批次的位置。

我目前遇到的问题是如何防止 2 个用户处理同一个批次?最初我考虑使用 FileSystemWatcher 来检查对每个文件夹的最后访问,但是阅读 FileSystemWatcher 如何引发它似乎不合适的事件。我考虑过使用轮询来检查每个文件夹中的图像以使用文件流进行文件访问,但我认为这也不合适(我可能错了)。

什么是最简单的解决方案?

4

1 回答 1

0

我会使用带有这样的包的锁定文件

代码很简单:

var fileLock = new SimpleFileLock("networkFolder/file.lock", TimeSpan.FromMinutes(timeout));

wheretimeout用于在使用它的进程崩溃时解锁文件夹(这样它就不会永远保持锁定状态)。

然后,每次进程需要使用该目录时,您都可以进行简单的检查:

if (fileLock.TryAcquireLock())
{
    //Lock acquired - do your work here
}
else
{
    //Failed to acquire lock - SpinWait or do something else
}

代码取自 repo 上的示例,这就是作者建议使用他的库的方式。

我有机会使用它,我发现它既有用又可靠。

于 2017-10-13T08:42:49.297 回答