2016-07-28 3 views
0

Как новичок в vb У меня есть некоторые проблемы в моем FileSystemWatcher. По какой-то зловещей причине он не возбуждает никаких событий. Я хочу проверить файлы, которые копируются, удаляются или редактируются в каталоге.FileSystemWatcher не запускает события

Я ценю любую помощь !!

Вот мой код:

Public Class FileWatcher 

Public Sub run(path As String) 
    Dim watcher As New FileSystemWatcher() 

    watcher.Path = path 
    watcher.Filter = "*.xml" 
    watcher.NotifyFilter = NotifyFilters.FileName Or NotifyFilters.LastWrite Or NotifyFilters.CreationTime 

    AddHandler watcher.Changed, AddressOf OnChanged 
    AddHandler watcher.Created, AddressOf OnChanged 
    AddHandler watcher.Deleted, AddressOf OnChanged 
    AddHandler watcher.Renamed, AddressOf OnRenamed 

    watcher.EnableRaisingEvents = True 

End Sub 


Public Function OnChanged(source As Object, e As FileSystemEventArgs) As String 
    ' Returns file name for later use 
    Console.WriteLine("Monitoring: " + e.FullPath) 
    Return e.FullPath 
End Function 

Public Function OnRenamed(source As Object, e As RenamedEventArgs) As String 
    Console.WriteLine("Monitoring: " + e.FullPath) 
    Return e.FullPath 
End Function 

End Class

+0

Связанный: http://stackoverflow.com/a/37553538/3740093 –

ответ

0

Первое, что нужно рассмотреть здесь является тот факт, что наблюдатель является локальной переменной внутри метода выполнения. Это означает, что ваш наблюдатель будет собирать мусор сразу после выхода из метода запуска. Вам нужно объявить его на уровне уровня globlal и сохранить экземпляр этого класса в прямом эфире до тех пор, пока вы не закончите использовать код мониторинга.

Public Class FileWatcher 
    Dim watcher As New FileSystemWatcher() 

    Public Sub run(path As String) 

     .... 

Следующая иметь в виду, что OnChanged и OnRenamed обработчики событий, таким образом, они должны быть объявлены как Sub не как функция. И, конечно же, они ничего не возвращают

Если вам нужно значение от этих обработчиков, вам нужно реализовать какие-то глобальные переменные, которые сохраняют ваши данные для дальнейшей обработки. Примером может быть список (список строк должен быть расширен, чтобы различать добавленных и удаленных файлов или лучше использовать свой собственный класс и список этих классов экземпляров)

Dim changedFiles = new List(Of String)() 
Dim renamedFiles = new List(Of String)() 
Public Sub OnChanged(source As Object, e As FileSystemEventArgs) 
    Console.WriteLine("Monitoring: " + e.FullPath) 
    changedFiles.Add(e.FullPath) 
End Sub 

Public Sub OnRenamed(source As Object, e As RenamedEventArgs) 
    Console.WriteLine("Monitoring: " + e.FullPath) 
    renamedFiles.Add(e.FullPath) 
End Sub 
+0

Большое вам спасибо! – Lilly

+0

Рад помочь, но только вопрос. Почему вы перестали принимать ответы, которые вам помогут? – Steve

+1

Извините, я как-то забыл – Lilly