加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

vb.net – 在FileSystemWatcher中处理多个Change事件

发布时间:2020-12-17 07:26:27 所属栏目:百科 来源:网络整理
导读:我有以下子: 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
我有以下子:

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.
>我为找到的每个唯一新文件分拆一个新线程;我的线程尝试获取文件的锁定,如果它不能这意味着其他进程仍然正在访问它(它仍然被上传等),所以我的线程休眠并在短暂的间隔后再次尝试.
>当文件被完全处理时,线程所做的最后一件事就是将其移动到存档文件夹,然后将其从队列中删除,这样就不会再次意外处理它.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读