[英]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.