C # обрабатывает стандартную задержку вывода
Из формы C # я бегупроцесс с начальной информацией, аналогичнойПеренаправить консольный вывод в текстовое поле в отдельной программе а такжеC # получить вывод процесса во время работыпроцесс выполняется правильно, однако вывод занимает много времениDataReceived событие.
Я хотел бы увидеть текст, как только процесс его сгенерирует; в соответствии сПроцесс стандартный вывод не может быть захвачен? (первый комментарий) Мне нужно подождать, пока заполнится буфер размером от 2 до 4 кб, прежде чем событие будет запущено.
По запросу это код:
void pcs_OutputDataReceived(object sender, System.Diagnostics.DataReceivedEventArgs e)
{
if (!string.IsNullOrEmpty(e.Data))
textBox1.BeginInvoke((Action)delegate { textBox1.AppendText(text + "\n"); });
}
private void LER_Go_Click(object sender, EventArgs e)
{
// variables LiDARExtRep contains the full path to an executable file
// that runs in DOS and produces verbose output.
// LER_Path.Text is the parameter passed to LiDARExtRep (only one arg for this example)
ProcessStartInfo pStartInfo = new ProcessStartInfo(LiDARExtRep, LER_Path.Text);
pStartInfo.UseShellExecute = false;
pStartInfo.ErrorDialog = false;
pStartInfo.RedirectStandardError = true;
pStartInfo.RedirectStandardInput = true;
pStartInfo.RedirectStandardOutput = true;
pStartInfo.CreateNoWindow = true;
System.Diagnostics.Process pcs = new System.Diagnostics.Process();
pcs.StartInfo = pStartInfo;
bool pStarted = pcs.Start();
pcs.OutputDataReceived += new DataReceivedEventHandler(pcs_OutputDataReceived);
pcs.BeginOutputReadLine();
pcs.WaitForExit();
}
Я не вижу в этом ничего особенного, это точно так же, как примеры, на которые я ссылался ... простой"Dir","/b/s"
в конструкторе должны выдавать те же результаты.
Есть ли способ уменьшить буфер до нескольких байтов или лучше запустить инструмент командной строки и получить вывод «в реальном времени»?
Справочная информация: я написал ряд программ для командной строки на C ++, которые работаютотличный, но молодое поколение, похоже, боится DOS, поэтому я создаю форму (GUI) для сбора параметров этих инструментов, как это кажетсямного меньше работы, чем пытаться поставить графический интерфейс для каждой программы на C ++. Если я не могу получить ответы в режиме реального времени, мне придетсяUseShellExecute = true;
и показать командное окно.