FileSystemWatcher更改了未引发的事件

Pax*_*nos 1 .net vb.net filesystemwatcher

我正在开发一个Windows服务,它可以监视几个文件夹以进行更改,创建和删除.除了一个观察单个文件(带有配置设置的XML文件)进行微小更改的观察者之外,一切运行良好.

我尝试使用Windows服务代码并将其放入一个简单的Windows应用程序,其中包含文件系统观察者的启动/停止按钮并逐步完成.它从不检测XML配置文件的文件更改.确实发生了更改,并且文件的"修改日期"正在更新.

XmlEventReferences = New System.IO.FileSystemWatcher()
XmlEventReferences.Path = "C:\XmlReferences\"
XmlEventReferences.Filter = "*.xml"
XmlEventReferences.NotifyFilter = IO.NotifyFilters.FileName
AddHandler XmlEventReferences.Changed, AddressOf ReloadEventReferences
AddHandler XmlEventReferences.Created, AddressOf ReloadEventReferences
AddHandler XmlEventReferences., AddressOf ReloadEventReferences
XmlEventReferences.EnableRaisingEvents = True
Run Code Online (Sandbox Code Playgroud)

这是一些代码,这是XML文件的示例:

<EventReference>
    <ER_EL_NUMBER>1</ER_EL_NUMBER>
    <ER_SEND_TO_DATABASE>true</ER_SEND_TO_DATABASE>
    <ER_ACTIVATE_ALARM>true</ER_ACTIVATE_ALARM>
    <ER_DESCRIPTION />
</EventReference>
Run Code Online (Sandbox Code Playgroud)

Nol*_*rin 11

我相信问题是价值NotifyFilter.你实际上只是告诉FileSystemWatcher他们寻找文件名的变化.为了让它也引发Changed文件修改事件,你也需要指定LastWrite标志.

即适当的代码行应更改为:

XmlEventReferences.NotifyFilter = IO.NotifyFilters.FileName |
    IO.NotifyFilters.LastWrite;
Run Code Online (Sandbox Code Playgroud)

有关NotifyFilters详细信息,请参阅MSDN上的页面.

注意:正如Joshua Belden指出的那样,你根本不需要设置NotifyFilter属性,因为MSDN声明:"默认是LastWrite,FileName和DirectoryName的按位OR组合." 但是,我认为在这种情况下最好是明确的 - 然后它会非常明显地表明它是什么FileSystemWatcher不在观看.