Проверка процессов в цикле while

300
09 августа 2017, 17:01

Есть 2 процесса игры которые я хочу чекать на запуск:

var GameProcess = new[] { "PB", "PointBlank" };

Как мне проверить их в цикле while?

Затем в консоли я делаю себе таймер в котором запускаю определённый метод (класс) который что-то делает.

private static void TimerCallback(object o)
{        
   Game.Clean(); // чистка файлов.
}
public static Timer MyTimer;
static void Main(string[] args)
{
   MyTimer = new Timer(TimerCallback, null, 0, 5000);
}
private static bool CheckProcessExists()
{
  var GameProcess = new[] { "PointBlank", "PB" };
  while (true)
  {
     foreach (string myListLine in GameProcess)
     {
       if (Process.GetProcessesByName(myListLine).Length > 0)
      // Console.Write("проверка запуска игры..");
      // Если процесс не существует то продолжать сканировать 
     // Но тут проблема в том что вывод на консоль будет 
     // очень много повторяться.
     // Хотелось бы как-то так: (Console)
        проверка запуска игры..  
        игра найдена запускаем таймер  
        выполняется метод  Game.Clean();
        (Выход из игры)
        Остановка таймера...
        проверка запуска игры.. 
     }
  }
}

Не могу сделать логику к программе:

1 - Сделать бесконечный цикл проверки процесса ( без торможения программы)

2 - Если процесс есть, запустить метод из TimerCallback

3 - Остановить таймер если процесс не обнаружен || если он есть запустить таймер.

Answer 1
  1. Ты можешь добавить незначительную задержку внутрь своего while (true) при помощи Thread.Sleep, например в 1000 мс. На самом деле правильнее добавить ManualResetEvent, который будет взводиться при прерывании программы (н.п. Ctrl+C в консольном приложении).

  2. Дождавшись процесса, ты выходишь из цикла и в этом месте создаёшь свой таймер.

  3. У экземпляра найденного процесса есть метода WaitForExit, используй его для того чтобы дождаться завершения процесса, после чего освобди таймер вызовом Dispose. Опять же в данном случае правильнее добавить AutoResetEvent, который будет сбрасываться при начале выполнения коллбека таймера и выставляться после, по его наличию или отсутствию ты можешь пропускать новые итерации таймера, если предыдущая ещё не завершилась (мало ли), а также дождаться завершения выполнения последней итерации перед выходом.

P.S. Не забудь обернуть обработчик события в блок try-catch, так как любая ошибка в процессе его выполнения приведёт к падению приложения с необработанным исключением.

READ ALSO
Как получить данные с удалённого хоста

Как получить данные с удалённого хоста

Пожалуйста получить данные с удалённого хоста

343
Как спарсить данные из HTML с помощью JS

Как спарсить данные из HTML с помощью JS

Здравствуйте! Вопрос в следующем-имеется сайт с которого я хочу спарсить список хешей к примеру сайт http://exsamplecom/?utm_source=md5

528
Получение свойства из JSON

Получение свойства из JSON

Я работаю с API в jsAPI возвращает - [{"id":134568,"username":"xtrafrancyz","level":20,"rank":"ADMIN","playedSeconds":4111133}]

295