Dostałem z uczelni zadanie, żeby napisać netstata w wersji okienkowej, z GUIem. Od zawsze odczuwam niechęć do wszystkiego, co jest związane z sieciami, więc uznałem że po prostu z poziomu C# włączę cmd, odpalę netstata i przekieruję do jakiegoś textboxa strumień wyjścia. Nawet mi się to udało, ale mam z tym jeszcze jeden, dosyć poważny problem.

private void Button_Click(object sender, RoutedEventArgs e)
        {
            rtb1.Document.Blocks.Clear();
            rtb1.AppendText("Executing...");
            Thread t = new Thread(new ThreadStart(Func));
            t.Start();
            int i = 0;
            while (!jest) { Thread.Sleep(1000); rtb1.AppendText("--" + i + " "); i++; }
            rtb1.AppendText(shared);
            shared = "";
            jest = false;
        }

        private void Func()
        {
            Process p = new Process();
            p.StartInfo = new ProcessStartInfo("cmd", "/c netstat")// + shared)
            {
                RedirectStandardOutput = true,
                UseShellExecute = false,
                CreateNoWindow = true
            };
            p.Start();
            string s = p.StandardOutput.ReadToEnd();
            //p.WaitForExit();
            shared = s;
            jest = true;
        }

W kodzie mam coś takiego. Ten kod działa, ale niestety nie tak jak miałem nadzieję - pomimo odpalenia konsoli z drugiego wątku, okno się wiesza i nie można nic zrobić do momentu zakończenia wykonywania polecenia przez cmd. Próbowałem też skierować strumień wyjścia do pliku, żeby go później odczytać (operatorem >>), ale to też zamiast wysyłać po linijce, wysyła od razu cały kod wyjściowy. No i mam przez to dwa problemy - po pierwsze, przy niektórych parametrach szybko wypisuje kilka pierwszych linijek, a nad końcowymi się po kilka sekund zastanawia i wyjście dostaję dopiero na sam koniec, a nie częściowo. Drugim problemem jest to, że jeśli bym chciał użyć interwału, powstaje mi "pętla", która nigdy nie ma końca. Program się wiesza i czeka na koniec polecenia, a cmd czeka na ręczne zakończenie komendy. Jest jakiś sposób na obejście tego, żeby cmd mi dawał kod po linijce, czy muszę siąść nad tym i napisać wszystko z łapy?