Есть 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 - Остановить таймер если процесс не обнаружен || если он есть запустить таймер.
Ты можешь добавить незначительную задержку внутрь своего while (true) при помощи Thread.Sleep
, например в 1000 мс. На самом деле правильнее добавить ManualResetEvent
, который будет взводиться при прерывании программы (н.п. Ctrl+C в консольном приложении).
Дождавшись процесса, ты выходишь из цикла и в этом месте создаёшь свой таймер.
У экземпляра найденного процесса есть метода WaitForExit
, используй его для того чтобы дождаться завершения процесса, после чего освобди таймер вызовом Dispose
. Опять же в данном случае правильнее добавить AutoResetEvent
, который будет сбрасываться при начале выполнения коллбека таймера и выставляться после, по его наличию или отсутствию ты можешь пропускать новые итерации таймера, если предыдущая ещё не завершилась (мало ли), а также дождаться завершения выполнения последней итерации перед выходом.
P.S. Не забудь обернуть обработчик события в блок try-catch
, так как любая ошибка в процессе его выполнения приведёт к падению приложения с необработанным исключением.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Здравствуйте! Вопрос в следующем-имеется сайт с которого я хочу спарсить список хешей к примеру сайт http://exsamplecom/?utm_source=md5
Я работаю с API в jsAPI возвращает - [{"id":134568,"username":"xtrafrancyz","level":20,"rank":"ADMIN","playedSeconds":4111133}]