Frage

Ich versuche, von nmap in WPF-Fenster Anwendung (Textbox genau) die Standardausgabe zu setzen. Ich versuche Dispatcher.Invoke zu verwenden, aber wenn nmap Prozess beginnt alles nur friert. Als ich versuchte, diese in einer Konsolenanwendung (w / o Invoke), alles gut gearbeitet, ich denke, es ist ein Problem mit der Invoke-Methode ist. Nmap selbst arbeitet, und Finishing es funktioniert, aber es gibt keine Antwort in meinem Fenster.

Hier ist der Code verwende ich:

 Process nmap = new Process();

 nmap.StartInfo.FileName = Properties.Settings.Default.NmapResidentialPath;
 nmap.StartInfo.Arguments = arguments.ToString();
 nmap.StartInfo.UseShellExecute = false;
 nmap.StartInfo.RedirectStandardOutput = true;
 nmap.OutputDataReceived += new DataReceivedEventHandler(nmap_OutputDataReceived);
 nmap.Start();
 nmap.BeginOutputReadLine();

 nmap.WaitForExit();
 nmap.Close();

Und die Event-Handler-Methode:

void nmap_OutputDataReceived(object sender, DataReceivedEventArgs e)
        {
            if (!String.IsNullOrEmpty(e.Data))
            {
                this.Dispatcher.Invoke(DispatcherPriority.Normal, (Action)(() => nmapOutput.Text += "\n" + e.Data));
            }
        }
War es hilfreich?

Lösung

Dies kann durch verschiedene Ursachen hervorgerufen werden. Erstens Stellen Sie sicher, dass nmapOutput Steuerung auf UI-Thread erstellt. Zweitens Dispatcher.Invoke kann UI-Thread Deadlock verursacht (und es ist wahrscheinlich in Ihrem Fall).

Rufen Sie immer Dispatcher.CheckAccess () vor Invoke aufrufen, oder verwenden Sie BeginInvoke diesen Vorgang in asynchroner Weise durchzuführen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top