当前位置:  开发笔记 > 大数据 > 正文

VB.NET FileSystemWatcher多个更改事件

如何解决《VB.NETFileSystemWatcher多个更改事件》经验,为你挑选了2个好方法。

我有以下代码:


Imports System.IO

Public Class Blah
    Public Sub New()
        InitializeComponent()

        Dim watcher As New FileSystemWatcher("C:\")
        watcher.EnableRaisingEvents = True

        AddHandler watcher.Changed, AddressOf watcher_Changed
    End Sub

    Private Sub watcher_Changed(ByVal sender As Object, ByVal e As FileSystemEventArgs)
        MsgBox(e.FullPath)
    End Sub
End Class

当我运行它并将更改保存到我的C驱动器上的文件时,代码工作得很好,除了它执行watcher_Changed()方法四次.知道为什么吗?每次changeType为"4".

谢谢.



1> John Kurlak..:

从VS.NET文档的"疑难解答FileSystemWatcher组件"部分...

为单个操作生成的多个创建事件

在某些情况下,您可能会注意到单个创建事件会生成由组件处理的多个Created事件.例如,如果使用FileSystemWatcher组件来监视目录中新文件的创建,然后使用记事本创建文件进行测试,即使只创建了一个文件,也可能会看到生成两个Created事件.这是因为Notepad在写入过程中执行多个文件系统操作.记事本批量写入磁盘,创建文件的内容,然后创建文件属性.其他应用程序可以以相同的方式执行.由于FileSystemWatcher监视操作系统活动,因此将拾取这些应用程序触发的所有事件.

注意:记事本也可能导致其他有趣的事件生成.例如,如果使用ChangeEventFilter指定只想查看属性更改,然后使用记事本写入正在查看的目录中的文件,则会引发事件.这是因为记事本在此操作期间更新了文件的Archived属性.



2> Frederik Ghe..:

不久前,我遇到了同样的问题.

经过对网络的一些搜索后,似乎我不是唯一一个有这个问题的人.:)所以,也许这是FileSystemWatcher中的一个缺陷......

我通过跟踪最后一次提出事件处理程序来解决它.如果它在xxx毫秒之前被提升,我将从我的事件处理程序返回.如果有人知道更优雅的修复; 请告诉我.:)

这就是我如何解决它:

if( e.ChangeType == WatcherChangeTypes.Changed )
{

    // There is a nasty bug in the FileSystemWatch which causes the 
    // events of the FileSystemWatcher to be called twice.
    // There are a lot of resources about this to be found on the Internet,
    // but there are no real solutions.
    // Therefore, this workaround is necessary: 
    // If the last time that the event has been raised is only a few msec away, 
    // we ignore it.
    if( DateTime.Now.Subtract (_lastTimeFileWatcherEventRaised).TotalMilliseconds < 500 )
    {
        return;
    }


    _lastTimeFileWatcherEventRaised = DateTime.Now;


    .. handle event

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有