Итак, я играю с одним из моих проектов, и сейчас возникает проблема: когда я нажимаю кнопку Start
, этот метод запускается.
public void Start()
{
if (!ServerIsRunning)
{
ConsoleOutput.Clear();
pServer = new Process();
pServer.StartInfo.FileName = "java";
pServer.StartInfo.Arguments = @"-jar " + "-Xms512M -Xmx1G myJavaFile.jar";
pServer.Start();
PID = pServer.Id;
counter = new PerformanceCounter("Process", "% Processor Time", pServer.ProcessName, true);
timer.Interval = TimeSpan.FromSeconds(1);
timer.Tick += timer_Tick;
timer.Start();
}
}
Я создал глобальное нулевое свойстводля PerformanceCounter
вот так
private PerformanceCounter counter;
И как вы можете видеть в методе запуска, именно здесь мы присваиваем ему значение.
Я создал это событие тика, а также для своего таймера, которыйобновляет свойство
void timer_Tick(object sender, EventArgs e)
{
FindServerProcess();
double pct = counter.NextValue() / 10;
ServerCPU = pct.ToString("0.0");
}
А вот метод внутри, который находит процесс, соответствующий определенному PID
public void FindServerProcess()
{
Process[] processes = Process.GetProcesses();
foreach (var process in processes)
{
if (process.Id == PID)
{
Console.WriteLine("Found the process!");
}
}
}
Когда я нажимаю запустить его, дайте мне знать в окне вывода, что оннаходит процесс, как и ожидалось, распечатав сообщение Found the process!
.
Однако .. Вот где он становится странным.Если я нажимаю кнопку остановки
private void Stop(string StopCommand)
{
counter.Close();
counter = null;
timer.Stop();
pServer.StandardInput.WriteLineAsync(StopCommand);
}
, она закрывает счетчик, обнуляет его, и я останавливаю таймер, который вызывает событие тика.Затем я также выдаю команду, которая просто stop
для потока консоли, которая просто закрывает процесс.На данный момент процесс был закрыт, я больше не вижу его в диспетчере задач.Однако, когда я нажимаю кнопку «Пуск», он начинает выводить Found the process!
два раза в одно и то же время, и значение изменяемого свойства кажется двойным.Это почему?Я не закрываю собственность безопасно?Или я забыл избавиться от каких-то предметов?