Я розширив на клас FileSystemWatcherвключити монітор FolderCount і монітор FolderEmpty, які піднімають події, якщо папка досягає певної кількості файлів або якщо папка повертається до порожнього стану. Я, здається, маю цю роботу, і я отримую події, підняті, коли ці умови відбуваються.
Однак моя проблема в тому, що коли мояFileSystemWatcher спочатку ініціалізує, він автоматично входить, щоб перевірити вміст папки зазначеної папки, щоб отримати кількість файлів. Якщо ліміт вже досягнуто, мені потрібно негайно підняти подію, а не чекати, поки FileSystemWatcher повідомить про це.
В даний час я можу тільки здаватися, щоб підняти події, підключивши до .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)
Спасибі @ Дэйв Андерсон за вказівку в правильному напрямку.