【发布时间】:2015-02-16 20:06:57
【问题描述】:
我正在尝试为 Iperf 服务器编写 C# 包装器。在 Iperf 客户端完成数据包发送后,C# 服务器应用程序应将输出数据转储到文本文件中。 问题是这个进程(服务器)永远不会退出,所以它不会将任何数据转储到 txt 文件中。但是,当我手动关闭运行 iperf 服务器的 cmd 窗口时,文本文件会写入数据(进程退出)。但这显然不是我正在寻找的解决方案。 有什么建议如何将数据直接写入文件,而无需手动关闭 iperf 服务器 cmd 窗口?
这是我的代码:
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);
}
【问题讨论】:
-
感谢您的链接,但这对我帮助不大。似乎进程(Iperf 服务器)实际上永远不会退出,因此它永远不会引发事件。我想知道是否有一种方法可以连续读取输出,而无需等待进程退出?谢谢。
-
它可以引发事件。我将接受答案中的代码粘贴到 VS verbaitm 中,更改文件路径和命令行,将文本框和按钮添加到表单并将按钮连接到
StartProcess方法,并在每行之后添加一个新行Display方法。我立刻得到了this。