вывод асинхронной консоли в текстовый блок - PullRequest
1 голос
/ 20 июня 2011

Я хотел бы выполнить исполняемый файл с некоторыми параметрами.

Я хотел бы, чтобы мое приложение WPF выводило строки консоли и отображало его в текстовом блоке асинхронно.

Это то, что яуже сделано:

System.Threading.Thread.Sleep(5000);
System.Diagnostics.Process runantc = new System.Diagnostics.Process();
runantc.StartInfo.FileName = "CMD.EXE";
runantc.StartInfo.Arguments = "/C " + Antcbatchpath;
runantc.StartInfo.UseShellExecute = false;

runantc.StartInfo.RedirectStandardOutput = true;
runantc.StartInfo.RedirectStandardError = true;

runantc.OutputDataReceived +=new DataReceivedEventHandler(runantc_OutputDataReceived);

runantc.Start();

runantc.BeginOutputReadLine();

runantc.Close(); 

private static void runantc_OutputDataReceived (object sendingProcess, 
DataReceivedEventArgs outLine)
{
 //i am not sure what should be here
}

Приведенный выше код изменен в соответствии с веб-страницей MSDN

У меня много проблем с их кодом именно потому, что им нужнодобавить в строки или что-то в этом роде.Я новичок в обработке событий и таких процессов.Пожалуйста, помогите мне, все, что мне нужно, это просто выводить эти строки в текстовый блок асинхронно.

Например, консоль выдаст:

running test...

я должен увидеть это в текстовом блоке:

running test...

затем через несколько секунд появляется другая строка:

running test...
this is a new line 1

, и через несколько секунд в текстовом блоке также должно появиться приведенное выше:

running test...
this is a new line 1

Ответы [ 2 ]

1 голос
/ 20 июня 2011

Следующий код должен делать то, что вы хотите:

private static void runantc_OutputDataReceived (object sendingProcess, DataReceivedEventArgs outLine)
{
    YourControl.Dispatcher.BeginInvoke(new Action(() => { YourControl.Text += outLine.Data; }), null);
}

РЕДАКТИРОВАТЬ: Хорошо, кажется, я должен немного объяснить код:

Для функции Dispatcher.BeginInvoke в качестве обратного вызова требуется делегат и массив параметров.

0 голосов
/ 20 июня 2011

Я не уверен, что он будет отображаться так, как вы ожидаете, но вы можете узнать подробности из выходного текста, используя свойство DataReceivedEventArgs.Data.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...