Pergunta

Eu estou tentando colocar a saída padrão de nmap em aplicação janela WPF (caixa de texto exatamente). Eu estou tentando usar Dispatcher.Invoke mas quando o processo nmap começa tudo simplesmente congela. Quando eu tentei isso em um aplicativo console (w / o Invoke), tudo funcionou muito bem, eu acho que é um problema com o método Invoke. Nmap em si está funcionando, e terminá-lo funcionar, mas não há resposta na minha janela.

Aqui está o código que estou usando:

 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();

E o método manipulador de eventos:

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

Solução

Isso pode ser causado por várias razões. Em primeiro lugar, garantir que o controle nmapOutput é criado em UI Thread. Em segundo lugar, Dispatcher.Invoke pode causar UI impasse Thread (e provavelmente é no seu caso).

Dispatcher.CheckAccess (Sempre chamada) antes de chamar Invoke, ou usar BeginInvoke para executar esta operação de forma assíncrona.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top