private static void DisplayIcmpReply(Probe pingItem) { if (pingItem.Reply == null) { return; } if (pingItem.Thread.CancellationPending) { return; } var pingOutput = new StringBuilder($"[{DateTime.Now.ToLongTimeString()}] "); // Read the status code of the ping response. switch (pingItem.Reply.Status) { case IPStatus.Success: pingOutput.Append("Reply from "); pingOutput.Append(pingItem.Reply.Address.ToString()); if (pingItem.Reply.RoundtripTime < 1) { pingOutput.Append(" [<1ms]"); } else { pingOutput.Append($" [{pingItem.Reply.RoundtripTime} ms]"); } break; case IPStatus.DestinationHostUnreachable: pingOutput.Append("Reply [Host unreachable]"); break; case IPStatus.DestinationNetworkUnreachable: pingOutput.Append("Reply [Network unreachable]"); break; case IPStatus.DestinationUnreachable: pingOutput.Append("Reply [Unreachable]"); break; case IPStatus.TimedOut: pingOutput.Append("Request timed out."); break; default: pingOutput.Append(pingItem.Reply.Status.ToString()); break; } // Add response to the output window. Application.Current.Dispatcher.BeginInvoke( new Action(() => pingItem.AddHistory(pingOutput.ToString()))); // If logging is enabled, write the response to a file. if (ApplicationOptions.IsLogOutputEnabled && ApplicationOptions.LogPath.Length > 0) { var logPath = $@"{ApplicationOptions.LogPath}\{pingItem.Hostname}.txt"; using (System.IO.StreamWriter outputFile = new System.IO.StreamWriter(@logPath, true)) { outputFile.WriteLine(pingOutput.ToString().Insert(1, DateTime.Now.ToShortDateString() + " ")); } } }