Ich versuche Standardausgabe von nmap in WPF-Fenster-Anwendung (Textfeld genau). Ich versuche, Dispatcher.Invoke zu verwenden, aber wenn nmap Prozess startet, friert alles nur ein. Als ich dies in einer Konsolenanwendung (ohne Invoke) probiert habe, hat alles gut geklappt, ich denke, es ist ein Problem mit der Invoke-Methode. Nmap selbst funktioniert, und es funktioniert, aber es gibt keine Antwort in meinem Fenster.Update UI von verschiedenen Prozess fehlschlägt
Hier ist der Code, den ich mit:
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));
}
}
Mit BeginInvoke Fenster, das den Prozess beginnt, verschwindet direkt nach dem nmap-Prozess, und ich habe immer noch keine Ausgabe in meinem Fenster. nmapOutput wird von UI-Thread sicher erstellt. – anusiak
Starten Sie nmap Prozess im Hintergrund Thread? Wenn nicht, wird nmap.WaitForExit() den UI-Thread blockieren und das Fenster einfrieren. –