В настоящее время я работаю над проектом C# и использую класс System.Diagnostic.Process.Закрытие процесса, который был запущен через поток
Когда моя программа запускается, создается новый поток, и внутри каждого потока начинается другой процесс.
В какой-то момент мне нужно проверить настройку в моей программе, чтобы увидеть, должен ли каждый процесс продолжать работать или он должен быть остановлен, но я не знаю, как я могу ссылаться на процесс, который был запущен определенным потоком. Каждый поток, который я дал имени при запуске процесса, но я понимаю, что C# создает поток, запускает процесс и затем закрывает поток, даже если процесс все еще работает и все еще получает выход.
Есть ли способ узнать, какой процесс был запущен потоком и отменить этот процесс.
Но я не вижу, как я могу использовать этот метод и словарь, чтобы остановить процесс на основе этого имени потока.
UPDATE В качестве следующего запроса используется код, который я использую, который создает каждый процесс в потоке. Я использую поток в словаре, так что я могу ссылаться на него из события outputreceived, но не знаю, как это сделать, если мне нужно закрыть процесс.
Thread worker = new Thread(new ThreadStart(() => startProducts(product.Value[0].startScript, product.Value[0].productName)));
worker.IsBackground = false;
worker.Name = product.Value[0].productName;
worker.Start();
logging.logger(string.Format("Starting product '{0}'", product.Value[0].productName));
Метод, который вызывает поток, заключается в следующем: здесь начинается каждый процесс. Гарантируется, что каждый процесс имеет именованный нить, никогда не будет двух потоков с тем же именем.
private void startProducts(string startScript, string product)
{
Process startProductProcess = new Process();
startProductProcess.StartInfo.FileName = startScript;
if (configManagement.productConfig[product][0].requireArguments == true)
{
startProductProcess.StartInfo.Arguments = configManagement.productConfig[product][0].arguments;
}
startProductProcess.StartInfo.UseShellExecute = false;
startProductProcess.StartInfo.RedirectStandardOutput = true;
StringBuilder processOutput = new StringBuilder("");
startProductProcess.OutputDataReceived += new DataReceivedEventHandler(startProductProcess_OutputDataReceived);
startProductProcess.Exited += new EventHandler(startProductProcess_Exited);
processTag.Add(startProductProcess, product);
startProductProcess.Start();
//Process localByName = Process.GetProcessById(startProductProcess.Id);
startProductProcess.BeginOutputReadLine();
logging.logger(string.Format("Started {0} with: {1} {2}", product,
startProductProcess.StartInfo.FileName, startProductProcess.StartInfo.Arguments));
}
Похоже, что вы должны использовать словарь и сохранять каждый процесс в словаре с чем-то вроде StatusEnum. – SimpleVar
Я думаю, что для выходного события уволен. Я добавлю код, чтобы он мог помочь. – Boardy