如何从System.Diagnostics.Process停止进程并最终获取统计信息

我正在使用此代码但是当我停止进程时它不会获得ping统计信息:

System.Diagnostics.Process p = new System.Diagnostics.Process(); p.StartInfo.FileName = "ping"; p.StartInfo.Arguments = "-c " + count + " -i " + interval + " -s " + buffer + " -W " + timeout + " " + address; p.StartInfo.UseShellExecute = false; p.StartInfo.RedirectStandardOutput = true; string readData = ""; DateTime dt = DateTime.Now.AddSeconds(5); if (p.Start()) { Scanner scanner = new Scanner(p.StandardOutput.BaseStream); while (scanner.HasNextLine) { readData = scanner.NextLine().ToString(); Console.WriteLine(readData.ToString()); if (!string.IsNullOrEmpty(readData) && !readData.StartsWith("---")) { Match M = Regex.Match(readData, @"^[\d]+ bytes from ([^:]+): [^ ]+ ttl=([\d]+) time=([^ ]+) ms"); if (M != null && M.Success) { string IP = M.Groups[1].Value; string TTL = M.Groups[2].Value; string timeStr = M.Groups[3].Value; Console.WriteLine(String.Format("Ping to {0} took {2} ms with a ttl of {1}", IP, TTL, timeStr)); // Parsing the timeStr will work the same way as above if(dt > DateTime.Now) { p.StandartInput.Write("\x3"); } } else { Match M1 = Regex.Match(readData, @"^rtt [^0-9]*([\d][^\/]+)\/([^\/]+)\/([^\/]+)\/([^ ]+) ms$"); if (M1 != null && M1.Success) { float avgPingTime = 0; float maxPingTime = 0; float minPingTime = 0; string minPingString = M1.Groups[1].Value; string avgPingString = M1.Groups[2].Value; string maxPingString = M1.Groups[3].Value; // Now parse that value float.TryParse(minPingString, System.Globalization.NumberStyles.Float, System.Globalization.NumberFormatInfo.InvariantInfo, out minPingTime); float.TryParse(avgPingString, System.Globalization.NumberStyles.Float, System.Globalization.NumberFormatInfo.InvariantInfo, out avgPingTime); float.TryParse(maxPingString, System.Globalization.NumberStyles.Float, System.Globalization.NumberFormatInfo.InvariantInfo, out maxPingTime); Console.WriteLine(String.Format("Min Time : {0} , AVG {2} ms, Max Time {1}", minPingTime, maxPingTime, avgPingTime)); } } } } } 

不使用

 if(dt > DateTime.Now) { p.StandartInput.Write("\x3"); } 

结果显示如下:

 64 bytes from 8.8.8.8: icmp_req=1 ttl=46 time=13.9 ms 64 bytes from 8.8.8.8: icmp_req=2 ttl=46 time=13.9 ms 64 bytes from 8.8.8.8: icmp_req=3 ttl=46 time=13.9 ms --- 8.8.8.8 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 3016ms rtt min/avg/max/mdev = 13.910/13.926/13.951/0.010 ms 

但如果我使用p.StandartInput.Write("\x3");停止ping p.StandartInput.Write("\x3"); 它永远不会进入statistics部分它挂起序列 64 bytes from 8.8.8.8: icmp_req=1 ttl=46 time=13.9 ms并且不继续读取,如何在停止ping进程后显示statistics

换句话说,我的问题是当用户想要停止ping它应该显示用于ping的特定时间的statistics

UPDATE

我已经实现了p.StandartInput.Write("/x3"); 它会中断ping进程,但它不显示统计信息,只是挂起。

Solutions Collecting From Web of "如何从System.Diagnostics.Process停止进程并最终获取统计信息"