У меня есть этот код в DoWork фонового работника:
Process downloadConvert = new Process();
downloadConvert.StartInfo.FileName = @"process.exe";
downloadConvert.StartInfo.Arguments = "args here";
downloadConvert.StartInfo.UseShellExecute = false;
downloadConvert.StartInfo.RedirectStandardOutput = true;
downloadConvert.StartInfo.RedirectStandardError = true;
downloadConvert.StartInfo.CreateNoWindow = true;
downloadConvert.EnableRaisingEvents = true;
downloadConvert.OutputDataReceived += (s, er) =>
{
Debug.WriteLine(er.Data);
if (er.Data != null && er.Data != "")
{
metadata trackInfo = JsonConvert.DeserializeObject<metadata>(er.Data);
title.Add(trackInfo.title);
}
if (fetchInfoBW.CancellationPending == true)
{
e.Cancel = true;
downloadConvert.Kill();
downloadConvert.WaitForExit();
return;
}
};
downloadConvert.Start();
downloadConvert.BeginOutputReadLine();
downloadConvert.WaitForExit();
Я добавил поддержку отмены для своего работника и хочу, чтобы она выходила после нажатия кнопки.Поскольку рабочий на самом деле является самим процессом, а процесс продолжает отправлять выходные данные, пока он активен, я пытаюсь найти способ завершить / убить / остановить его из OutputDataReceived.Код выше, похоже, успешно завершает процесс (он больше не отправляет выходные данные отладки), но по какой-то причине событие завершения работника никогда не запускается, и приложение останавливается на этом.