提问人:hackedsolutions 提问时间:8/28/2022 更新时间:8/28/2022 访问量:35
VB.et FileSystemWatcher 事件处理程序 - 处理程序重复调用(不需要)
VB.et FileSystemWatcher Event Handler - Calls of Handler Repeats (Unwanted)
问:
我正在尝试通过将文件添加到列表中的自定义类来使用 FileSystemWatch 类记录目录中的文件活动,不幸的是,似乎在复制文件或将新文件添加到目标目录时,它运行了 4 次而不是一次。
将文件添加到目录时,AddressOf Sub 将写入 3 到 4 次,而不是只写入一次。我不知道为什么。
下面是代码片段。
Public fileTypefilter As String = "*.xlsx"
Public DesDir As String = "C:\"
Public EventLog As List(Of FileEvent)
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim watchDir As String = DesDir
Dim watch As New FileSystemWatcher(watchDir)
Me.Text = "Monitoring " & watch.Path
watch.IncludeSubdirectories = false
watch.Filter = "*.xlsx"
AddHandler watch.Changed, AddressOf watch_Changed
watch.EnableRaisingEvents = True
End Sub
Private Sub watch_Changed(ByVal sender As Object, ByVal e As FileSystemEventArgs)
Try
EventLog.Add(New FileEvent(e.FullPath))
Exit Sub
Catch ex As NullReferenceException
EventLog = New List(Of FileEvent)({New FileEvent(e.FullPath)})
Exit Sub
End Try
End Sub
答:
2赞
John
8/28/2022
#1
由于发生了多次更改,因此会多次执行事件处理程序。与往常一样,您应该先自己阅读相关文档,其中写道:Changed
文件或文件夹的更改。更改类型包括:对大小、属性、安全设置、上次写入和上次访问时间的更改。
如果您不想记录每个单独的更改,则需要以某种方式过滤它们。例如,您可能希望记录特定路径发生更改的时间,如果自同一路径的上次更改以来未经过某个最短时间,则不记录更改。
还可以选择使用 a 而不是 .可以将其配置为使用适当的相等比较器,然后您可以根据需要为同一路径调用任意次数,并且只会添加一次。这意味着,如果稍后对同一路径发生一组更改,则不会记录这些更改。我不确定这对你来说是否是一个问题。HashSet
List
Add
评论
Exit Sub
Load
FileSystemWatcher
SynchronizingObject