gpt4 book ai didi

vb.net - 在 FileSystemWatcher 中处理多个更改事件

转载 作者:行者123 更新时间:2023-12-03 18:21:34 24 4
gpt4 key购买 nike

我有以下子项:

  Private Sub Watcher_Changed(ByVal sender As System.Object, ByVal e As FileSystemEventArgs)
If Path.GetExtension(e.Name) = ".p2p" Then
Exit Sub
Else
Try
' multiple change events can be thrown. Check that file hasn't already been moved.
While Not File.Exists(e.FullPath)
Exit Try
End While

' throw further processing to a BackGroundWorker
ChangedFullPath = e.FullPath
ChangedFileName = e.Name

FileMover = New BackgroundWorker
AddHandler FileMover.DoWork, New DoWorkEventHandler(AddressOf ProcessFile)
FileMover.RunWorkerAsync()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try

End If
End Sub

当 FTP 上传文件时,我仍然收到多个文件更改通知。

我想修改 Try 以便如果它在过去(时间)内发生,它也会抛出更改通知 - 假设 3 秒。它应该是微不足道的,但出于某种原因,它今天没有出现在我身上,而且我的思绪并没有围绕着我在 Google 上找到的答案。

谢谢,
斯科特

最佳答案

几年前,我创建了一个服务来上传转储到 FTP 文件夹的文件,以下是我所做的一些可以帮助您解决问题的事情:

  • 我测试了所有的 NotifyFilters 并选择了一个可以消除重复通知的(仅使用 NotifyFilters.Size 为我创建的每个文件提供可靠的通知,并消除了几乎所有的重复通知)
  • 在 Watcher_Changed 事件中,我忽略了事件 args 中包含的文件,只处理了当前文件夹中的所有文件;我尝试将文件夹中的所有文件添加到队列中,如果它们已经在队列中,我会跳过下面的 3。
  • 我为找到的每个独特的新文件创建一个新线程;我的线程尝试获取对文件的锁定,如果不能,则意味着其他进程仍在访问它(它仍在上传等),因此我的线程休眠并在很短的间隔后再次尝试。
  • 当一个文件被完全处理后,线程所做的最后一件事就是将它移动到一个存档文件夹,然后将它从队列中删除,这样它就不会被意外地再次处理。

  • 这似乎对我有用,并且该服务可靠地上传文件数月,直到我离开那份工作。

    关于vb.net - 在 FileSystemWatcher 中处理多个更改事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/381976/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com