Проблема с таймером службы Windows - PullRequest
0 голосов
/ 19 сентября 2019

Я разработал приложение для Windows, которое будет следить за исходной папкой, если найдет какие-либо папки под исходным кодом, переместит эту папку в папку процесса, после выполнения какой-либо операции в папке процесса, она переместит папку назначения этих папок или папку с ошибками.Это приложение Windows, которое я преобразовал в службу Windows, и я делаю эту службу, будет вызывать каждые 30 секунд, но теперь я не понимаю, как проверить, прежде чем вызывать службу, в следующий раз, когда завершится предыдущий процесс или нет, если он не завершен, как избежать повторного вызова службы.

Я добавил интервал таймера на 30 секунд, но процесс может занять более 30 секунд (непредсказуемо).

protected override void OnStart(string[] args)
{
   timer.Elapsed += new ElapsedEventHandler(OnElapsedTime);
   timer.Interval = 30000; //5000number in milisecinds  
   timer.Enabled = true;
}
private void OnElapsedTime(object source, ElapsedEventArgs e)
{           
   foldermovinglogic();
}

1 Ответ

0 голосов
/ 19 сентября 2019

Вы слишком усложняете вещи. В .Net есть встроенный FileSystemWatcher , который будет отбрасывать событие, когда что-то в каталоге было изменено, с этого момента вы можете фильтровать по созданным папкам и сравнивать вложенные папки сейчас свложенные папки в последнем изменении и делать то, что вы собираетесь делать с вновь созданными папками.

Пример для вас:

using System.IO;
  1. Объявить FileSystemWatcher
private static FileWatcher yourFileWatcher;
Инициализация FileSystemWatcher
yourFileWatcher = new FileSystemWatcher(directory);
yourFileWatcher.Created += new FileSystemEventHandler(OnCreated); 
OnCreated - это место, где вы сравниваете структуру now с прошлой структурой, которая должна иметь следующий формат:
private void FSW_Created(object sender, FileSystemEventArgs e)

См. Это учебное пособие

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...