문제

NMAP에서 WPF 창 응용 프로그램에 표준 출력을 넣으려고합니다 (정확히 텍스트 상자). Dispatcher.invoke를 사용하려고하지만 NMAP 프로세스가 시작될 때 모든 것이 정지됩니다. 콘솔 애플리케이션에서 이것을 시도했을 때 (w/o invoke), 모든 것이 잘 작동했습니다. 나는 그것이 호출 방법의 문제라고 생각합니다. NMAP 자체가 작동하고 마무리가 작동하지만 내 창에는 응답이 없습니다.

여기에 사용중인 코드는 다음과 같습니다.

 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));
            }
        }
도움이 되었습니까?

해결책

이것은 여러 가지 이유로 인해 발생할 수 있습니다. 먼저 UI 스레드에서 nmapoutput 컨트롤이 생성되는지 확인하십시오. 둘째, Dispatcher.invoke는 UI 스레드 교착 상태를 유발할 수 있습니다 (아마도 귀하의 경우에있을 것입니다).

호출을 호출하기 전에 항상 Dispatcher.checkaccess ()를 호출하거나 BeginInvoke를 사용 하여이 작업을 비동기 방식으로 수행하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top