2013-08-31 5 views
0

Process.StandardOutput에서 데이터를 가져 오려고합니다 ...하지만 문제가 있습니다. 프로세스가 종료되었지만 실행 중에 데이터를 가져 오지 않습니다 (플러시되지 않습니다). ???). 데이터가 어딘가에 버퍼링 된 것처럼 보입니다. 프로세스를 수동으로 실행하면 실행 중에 메시지가 표시됩니다. 어떻게 고치는 지?Process.StandardOutput에서 데이터 가져 오기

답변

0

이것은 프로세스에서 출력을 가져 오는 데 사용하는 것입니다. 이것은 stringbuilder에 추가되지만 다른 일을 할 수 있습니다.

private void RunWithOutput(string exe, string parameters, out string result, out int exitCode) 
    { 
     ProcessStartInfo startInfo = new ProcessStartInfo(exe, parameters); 
     startInfo.CreateNoWindow = true; 
     startInfo.UseShellExecute = false; 
     startInfo.RedirectStandardError = true; 
     startInfo.RedirectStandardOutput = true; 
     Process p = new Process(); 
     p.StartInfo = startInfo; 

     p.Start(); 

     StringBuilder sb = new StringBuilder(); 
     object locker = new object(); 
     p.OutputDataReceived += new DataReceivedEventHandler(delegate(object sender, DataReceivedEventArgs args) 
     { 
      lock(locker) 
      { 
       sb.Append(args.Data); 
      } 
     }); 
     p.ErrorDataReceived += new DataReceivedEventHandler(delegate(object sender, DataReceivedEventArgs args) 
     { 
      lock (locker) 
      { 
       sb.Append(args.Data); 
      } 
     }); 

     p.BeginErrorReadLine(); 
     p.BeginOutputReadLine(); 

     p.WaitForExit(); 
     result = sb.ToString(); 
     exitCode = p.ExitCode; 
    } 
+0

같은 똥. 라인은 프로세스 마무리에만 있습니다. – KOLANICH

+0

다른 EOL 스타일 덕분일까요? – KOLANICH

+0

아니요, streamreader는 가장 많이 사용되는 3 가지 EOL 스타일을 지원합니다. 문제는 다른 곳에서이다. – KOLANICH