У меня есть процесс, который работает в фоновом режиме и имеет WaitForExit()
, так как продолжительность может варьироваться, и мне нужно подождать, пока она не закончится. В некоторых случаях мне нужно закончить его до его завершения, и я запускаю команду .Kill()
через событие класса. Свойство .HasExited
изменяется на true, но код никогда не проходит по линии WaitForExit()
.Does process.kill() завершает WaitForExit() (без ограничения по времени)
public class MyProcess: Process
{
private bool exited;
public MyProcess()
{
...
}
public void Start(args...)
{
try
{
base.StartInfo.FileName = ...
base.StartInfo.Arguments = ...
base.StartInfo.RedirectStandardOutput = true;
base.StartInfo.UseShellExecute = false;
base.StartInfo.CreateNoWindow = true;
base.EnableRaisingEvents = true;
base.Exited += new EventHandler(MyProcessCompleted);
base.OutputDataReceived += new DataReceivedEventHandler(outputReceived);
base.Start();
this.exited = false;
base.BeginOutputReadLine();
while (!this.exited)
{
if()
{
...
}
else
{
base.WaitForExit(); ---- after the process is killed, it never gets past this line.
}
...
}
}
catch (Exception ex)
{
...
}
}
private void MyProcessCompleted(object sender, System.EventArgs e)
{
exited = true;
...
}
private void outputReceived(object sender, DataReceivedEventArgs e)
{
...
}
//Subscription to cancel event
public void ProcessCanceled(object sender, EventArgs e)
{
...
if (!exited)
{
base.Kill();
}
}
}
\
UPDATE:
Мой процесс запускает клиент передачи файлов Java на основе и выполняет передачу. Процесс появляется в диспетчере задач, а Kill()
не заканчивает его. Так как я действительно не забочусь о завершении процесса, а скорее нуждаюсь в моей программе, чтобы перейти к следующей «задаче», я добавил Close()
сразу после Kill()
, который выпускает WaitForExit
и позволяет моему коду «двигаться дальше». Прекращение процесса на раннем этапе будет редким явлением в моем приложении, но мне все еще нужно его работать, поэтому эта реализация должна будет сделать.
Любой код для показа? – EZI