Разширих класа FileSystemWatcherвключи монитор FolderCount и монитор FolderEmpty, който повдига събития, ако дадена папка достигне определено количество файлове или ако дадена папка се върне към празно състояние. Изглежда, че имам тази работа и получавам събития, повдигнати при тези условия.
Въпреки това, проблемът ми е, че когато моятаFileSystemWatcher първо се инициализира, автоматично влиза, за да провери съдържанието на папката в указаната папка, за да получи броя на файловете. Ако лимитът вече е достигнат, трябва незабавно да повдигна събитие, вместо да чакам FileSystemWatcher да го докладва.
В момента мога само да повдигна събития, като се включа в. \ T .Created
и .Deleted
призовава, обаче, тъй като не се създават или изтриват файлове, не знам как да повдигна моето събитие ръчно.
Public Sub Initialize()
SetFolderCountStatus() "Set the isFolderEmpty flag based on file contents
If Not isFolderEmpty Then
If options.WatchForFolderCount Then
If FileCountReached(options.FileCountToWatch) Then
RaiseEvent EventFolderCount(sender, e) "Sender and e are never defined
End If
End If
End If
End Sub
Моят проблем е, че и двете sender
и e
никога не се населява с нищо, защото те седят извън моята WatcherEventArgs
.
Аз съм сигурен, че това може да се направи по-добър начин, но аз не съм сигурен. Всяка помощ ще бъде оценена. Благодаря
Отговори:
1 за отговор № 1Всъщност използвате ли sender
и EventArgs
във вашия EventFolderCount
метод? Можете да минете Me
за подателя и празната EventArgs
обект.
въпреки това Какви са аргументите на събитието „подател“ и „е“ предполага, че опитът да се повиши събитието не е предпочитан. Вместо това трябва да имате един метод, който изпълнява задачата и да го извиква на двете места.
0 за отговор № 2
Всъщност реших това, променяйки EventHandler, за да изисквам само a String
променлива, а не EventArgs
:
Public Event EventFolderCount(filename As String)
По този начин мога да го нарека лесно вътре и извън FileSystemWatcher
така:
RaiseEvent EventFolderCount(filename)
Благодаря @ Дейв Андерсън, за да ме посочи в правилната посока.