Я пытаюсь написать оболочку C# для сервера Iperf. После того как клиент Iperf будет выполнен с отправкой пакетов, серверное приложение C# должно выгрузить выходные данные в текстовый файл. Проблема заключается в том, что этот процесс (сервер) никогда не выходит, поэтому он не сбрасывает никаких данных в txt-файл. Однако, когда я вручную закрываю окно cmd, на котором запущен сервер iperf, текстовый файл записывается с данными (выходы процесса). Но это явно не то решение, которое я ищу. Любые предложения, как я могу записать данные непосредственно в файл, без необходимости вручную закрыть окно cmd iperf server?C# Iperf Server
Это мой код:
private void button1_Click(object sender, EventArgs e)
{
string commandline_server = " -s -u -i 1";
try
{
process = new Process();
process.StartInfo.FileName = "iperf.exe";
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
//process.StartInfo.RedirectStandardError = true;
process.StartInfo.Arguments = commandline_server;
process.StartInfo.CreateNoWindow = false;
process.EnableRaisingEvents = true;
process.Exited += new EventHandler(process_Exited);
process.Start();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
void process_Exited(object sender, EventArgs e)
{
//throw new NotImplementedException();
string outfile = process.StandardOutput.ReadToEnd();
System.IO.File.WriteAllText("test.txt", outfile);
}
Возможный дубликат [Как асинхронно читать стандартный поток вывода и стандартный поток ошибок сразу) (http://stackoverflow.com/questions/12566166/how-to-asynchronously-read-the-standard-output-stream -and-standard-error-stream) –
Спасибо за вашу ссылку, но это не очень помогает мне. Кажется, что процесс (сервер Iperf) на самом деле никогда не завершается, поэтому он никогда не вызывает событие. Мне интересно, есть ли способ читать вывод непрерывно, не дожидаясь завершения процесса? Благодарю. – stani
Он поднимает события все в порядке. Я вставил код из принятого ответа в VS verbaitm, изменил путь к файлу и в командной строке, добавил текстовое поле и кнопку в форму и подключил кнопку к методу StartProcess и добавил новую строку после каждой строки в 'Display'. Я сразу получил [это] (http://i.stack.imgur.com/78yAL.png). –