0
nmapの標準出力をWPFウィンドウアプリケーション(テキストボックス)に入れようとしています。私はDispatcher.Invokeを使用しようとしていますが、nmapプロセスが起動するときにすべてが凍ってしまいます。私がコンソールアプリケーション(Invokeなし)でこれを試したところ、すべてうまくいっていましたが、Invokeメソッドの問題だと思います。 Nmap自体は動作しており、動作は終了していますが、私のウィンドウには応答がありません。異なるプロセスからのUIの更新が失敗しました
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();
そして、イベントハンドラメソッド:
void nmap_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
if (!String.IsNullOrEmpty(e.Data))
{
this.Dispatcher.Invoke(DispatcherPriority.Normal, (Action)(() => nmapOutput.Text += "\n" + e.Data));
}
}
nmapプロセスが終了した直後にプロセスを開始するBeginInvokeウィンドウを使用しても、ウィンドウには何も出力されません。 nmapOutputは、確実にUIスレッドによって作成されます。 – anusiak
バックグラウンドスレッドでnmapプロセスを起動しますか? nmap.WaitForExit()以外の場合、UIスレッドをブロックしてウィンドウをフリーズします。 –