我目前正在使用C#编写一个小应用程序来处理批量图像并将它们放入PDF中。每批图像都存储在网络共享中的自己的文件夹中。该应用程序将使用户能够在创建PDF之前对来自单个批次的随机数量的图像执行QA检查。在单个桌面上运行此应用程序的用户最多可以有4-6个用户访问存储图像批次的位置。
我目前遇到的问题是如何防止2个用户处理同一批次?最初我考虑使用FileSystemWatcher来检查每个文件夹的最后访问权限,但是阅读FileSystemWatcher如何引发事件似乎并不合适。我已经考虑使用轮询检查每个文件夹中的图像以使用文件流进行文件访问,但我认为这也不合适(我可能错了)。
最简单的解决方案是什么?
答案 0 :(得分:0)
我使用包含this等包的锁文件。
代码非常简单:
var fileLock = new SimpleFileLock("networkFolder/file.lock", TimeSpan.FromMinutes(timeout));
其中timeout
用于解锁文件夹,如果使用它的进程崩溃(以便它不会永远保持锁定)。
然后,每当进程需要使用该目录时,您只需进行简单的检查:
if (fileLock.TryAcquireLock())
{
//Lock acquired - do your work here
}
else
{
//Failed to acquire lock - SpinWait or do something else
}
代码取自回购中的样本,以便作者建议使用他的库。
我有机会使用它,我发现它既有用又可靠。