我已经在 VB.2010 和 2019 中尝试过。这是一个 Windows 桌面应用程序。
它有一个 FileSystemWatcher 创建例程,该例程可以控制何时将文件放入文件夹,然后通过调用的函数处理该文件。调用的函数必须是同步的,如果调用多个实例会出现不可预知的问题。
问题是一旦调用函数(DoMonitorFolder),锁就会丢失,同步锁块将在第一个块完成之前再次进入。
简化代码如下。有了断点,我已经看到:
- 如果文件夹中有多个文件,则在第二次到达 End Synclock 之前进入该块。断点放在 SyncLock 之后和 End SyncLock 上
- 第二次进入时,RunningFileNowBol 为真。它在输入时在 DoFolderMonitor 中设置为 true,在返回之前设置为 false。
- 如果取出 DoFolderMonitor,则仅在 End Synclock 执行后才进入 Synclock 块,这是我所期望的。
那么在块中嵌入函数调用是否有限制?是否有替代方法可以同步从 FSW.Created 调用 DoFolderMonitor?
Private Sub FSW_Created(ByVal sender As Object, ByVal e As System.IO.FileSystemEventArgs) Handles FSW.Created
SyncLock TheProgram ' & "FWS_CREATED"
If RunningFileNowBol Then
iNop = iNop
Else
If Not DoFolderMonitor(pFFn:=e.FullPath) Then
GoTo ExitFunction
End If
End If
End SyncLock
ExitFunction:
Return
End Sub