我正在尝试启动一个程序并读取它的标准输出。但是,该事件从未被提出。我启动的进程正在运行,并在控制台中使用相同的参数创建输出。任何想法,我做错了什么?
public void StartProcess(string Filename, string Arguments)
{
currentProcess = new Process();
currentProcess.StartInfo.FileName = Programm;
currentProcess.StartInfo.Arguments = Arguments;
currentProcess.StartInfo.UseShellExecute = false;
currentProcess.StartInfo.RedirectStandardOutput = true;
currentProcess.StartInfo.RedirectStandardError = true;
currentProcess.OutputDataReceived += OutputReceivedEvent;
currentProcess.EnableRaisingEvents = true;
string path = DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss") + "_Result.txt";
LastResult = path;
resultfile = File.CreateText(path);
currentProcess.Start();
currentProcess.BeginOutputReadLine();
response.command = Command.ACK;
SendMessage(response);
}
private void OutputReceivedEvent(object sender, DataReceivedEventArgs e)
{
resultfile.WriteLine(e.Data);
}
编辑:我刚刚发现了一些奇怪的东西:我开始的过程是 mcast。如果我启动 ping 之类的其他操作,我的代码就可以正常工作。所以 mcast 似乎做了一些有趣的事情!
EDIT2:所以下面的代码正在工作,但只读取一定大小的块,如果写入流的字节数较少,则偶数不会发生,.ReadBlock 也不会返回任何内容。
EDIT3:所以还有一个更新,问题是,mcast 不会刷新它的输出流。我最终编写了自己的工具,它工作得很好。