private static void Worker_DoWork(object sender, DoWorkEventArgs e) { ObservableCollection <Process_Port_Map_Model> PPMListOfWorker = e.Argument as ObservableCollection <Process_Port_Map_Model>; string[] rows; string[] tokens; string LocalAddress; string _Name; try { using (Process p = new Process()) { ProcessStartInfo ps = new ProcessStartInfo(); ps.Arguments = "-a -n -o"; ps.FileName = "netstat.exe"; ps.UseShellExecute = false; ps.CreateNoWindow = true; ps.RedirectStandardInput = true; ps.RedirectStandardOutput = true; ps.RedirectStandardError = true; p.StartInfo = ps; p.Start(); StreamReader stdOutput = p.StandardOutput; StreamReader stdError = p.StandardError; string content = stdOutput.ReadToEnd() + stdError.ReadToEnd(); string exitStatus = p.ExitCode.ToString(); //Get The Rows rows = Regex.Split(content, "\r\n"); foreach (string row in rows) { //Split it baby tokens = Regex.Split(row, "\\s+"); if (tokens.Length > 4 && (tokens[1].Equals("UDP") || tokens[1].Equals("TCP"))) { LocalAddress = Regex.Replace(tokens[2], @"\[(.*?)\]", "1.1.1.1"); _Name = tokens[1] == "UDP" ? LookupProcess(Convert.ToInt16(tokens[4])) : LookupProcess(Convert.ToInt16(tokens[5])); if (!_Name.Equals("Idle")) { PPMListOfWorker.Add(new Process_Port_Map_Model { Protocol = LocalAddress.Contains("1.1.1.1") ? String.Format("{0}v6", tokens[1]) : String.Format("{0}v4", tokens[1]), PortNumber = LocalAddress.Split(':')[1], Name = _Name }); } } } p.Kill(); } } catch (Exception) { } e.Result = PPMListOfWorker; }