[英]SyncLock loses lock if a function is called within the block in VB.Net
我在 VB.2010 和 2019 中尝试过这个。这是一个 Windows 桌面应用程序。
它有一个 FileSystemWatcher 创建例程,该例程在将文件放入文件夹时获得控制,然后通过调用的函数处理该文件。 被调用的函数必须是同步的,如果调用多个实例会出现不可预知的问题。
问题是一旦调用函数 (DoMonitorFolder),锁就会丢失,同步锁块将在第一个块完成之前再次进入。
简化代码如下。 使用断点我已经看到:
那么在块中嵌入函数调用有限制吗? 是否有替代方法可以同步从 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
System.Windows.Forms.Application.DoEvents() 似乎破坏了 SyncLock。 当 DoEvents 未执行时,它按预期工作。 我不确定 MuteX,但经过大约 10 个小时的反复试验,我现在已经完成了。
如果有人有一个好的选择,除非被释放,否则不会破坏锁定,如果你让我知道,我将不胜感激。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.