/ / Як я можу RaiseEvent вручну для FileSystemWatcher - vb.net, події, filesystemwatcher, raiseevent

Як я можу вивести RaiseEvent вручну для FileSystemWatcher - vb.net, events, filesystemwatcher, risevent

Я розширив на клас 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)

Спасибі @ Дэйв Андерсон за вказівку в правильному напрямку.