Я использую стороннее консольное приложение, которое периодически выводит данные на консоль построчно. Когда я попытался запустить его через приложение, чтобы можно было проанализировать выходные данные, я заметил, что OutPutstream доступен для чтения только ПОСЛЕ закрытия приложения.
Я протестировал свое приложение с консольным приложением C #, которое выводит данные на консоль каждые 5 секунд, и оно работает, как и ожидалось. Сторонний процесс, который я вызываю, написан на Java или C ++ (не уверен), но кажется, что он может не соответствовать стандартам, которые ожидает .NET для консольных приложений.
Есть ли другой способ чтения данных, выводимых консольным приложением?
Редактировать: Я вызываю процесс из приложения WPF. Поэтому требуется асинхронное чтение.
Редактировать 2: Консольное приложение считывает данные с устройства USB (акселерометр - http://www.gcdataconcepts.com/).
Ниже приведен код, который я использовал:
public void RunProcess()
{
Process process = new Process();
process.StartInfo.FileName = "consoleApp.exe";
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.CreateNoWindow = true;
process.OutputDataReceived += new DataReceivedEventHandler(OutputHandler);
process.Start();
process.BeginOutputReadLine();
}
private void OutputHandler(object sendingProcess, DataReceivedEventArgs outLine)
{
if (!string.IsNullOrEmpty(outLine.Data))
{
Dispatcher.Invoke(new Action(() =>
{
textBlock1.Text += outLine.Data + Environment.NewLine;
}), System.Windows.Threading.DispatcherPriority.Normal);
}
}