Я использую класс System.Diagnostics.Process
для выполнения программы командной строки.
Я использую метод OutputDataReceived
, чтобы перенаправить вывод в мой собственный метод.
pr.OutputDataReceived += new DataReceivedEventHandler(OnDataReceived);
pr.ErrorDataReceived += new DataReceivedEventHandler(OnDataReceived);
Однако у меня есть несколько потоков, выполняющих несколько экземпляров этой программы cmd. Что я хочу сделать, так это уметь определить, из какого экземпляра процесса пришли выходные данные - в идеале - строка, содержащая имя. (У каждого процесса есть свой индикатор выполнения в графическом интерфейсе. Я создаю другое событие для передачи вывода в графический интерфейс, поэтому мне нужно знать, из какого процесса поступили данные, чтобы обновить свой индикатор выполнения).
Я начал экспериментировать с:
public override delegate void DataReceivedEventHandler(object sender, DataReceivedEventArgs e, string processName);
Затем я понял, что мне придется переопределить метод OutputDataReceived
внутри класса Process. Что, в свою очередь, означало бы, что мне нужно создать собственный класс, который наследует System.Diagnostics.Process
, и иметь метод, который принимает строковый аргумент, чтобы событие OutputDataReceived
могло передать имя экземпляра процесса (строку) моему переопределенному DataReceivedEventHandler
.
Цель этого вопроса - получить некоторые мнения о том, как действовать. Кажется ли то, что я предлагаю, правильным путем для достижения того, чего я хочу? Или есть лучший способ сделать это?