2009-09-04 7 views
1

나는 exe가 실행 중일 때 exe의 출력으로 계속 업데이트해야하는 텍스트 상자가있는 C# 폼이 있습니다. 나는 exe가 끝난 후에 그것을 업데이트하는 방법을 알고 있지만 그것의 상수 갱신은 내가 필요로한다.지속적으로 프로세스 표준 출력으로 폼을 업데이트하십시오.

// Normal creation and initialization of process - additionally: 
process.StartInfo.UseShellExecute = false; 
process.StartInfo.RedirectStandardOutput = true; 
process.OutputDataReceived += ProcessOnOutputDataReceived; 
process.Start(); 
process.BeginOutputReadLine(); 

및 핸들러 : EXE 파일을 시작

+1

Exe를 System.Diagnostics.Process로 실행하고 있습니까? –

+0

그래, 난 그냥, exe의 출력에서 ​​지속적인 업데이 트를 받고 싶지만 ive 시도는 EXE가 끝날 때까지 기다려야 할 것 같다 – Chiefy

답변

1

당신은 당신의 프로세스를

private void ProcessOnOutputDataReceived(object sender, DataReceivedEventArgs args) 
{ 
    // use args.Data 
} 

편집 :
내가 process.StartInfo.UseShellExecute = false; 잊었 :/

편집 :
exe가 출력을 플러시하지 않았 음을 알았습니다. (의견 참조)

+0

이것은 여전히 ​​이벤트가 호출되기 전에 exe를 끝내기를 기다리는 것 같습니다. exe가 멈추도록 강요하고 이벤트가 출력과 함께 반복해서 호출 될 때 이벤트에서 내 브레이크 포인트 만 누르십시오. 이것을 개선하는 방법에 대한 아이디어가 있습니까? – Chiefy

+0

process.StartInfo.UseShellExecute = false;를 설정해야합니다. – tanascius

+0

나는 벌써 그것을 거짓으로 보았다 : S 그래서 지금은 매우 붙어있다. – Chiefy

0

이렇게하는 한 가지 방법은 remoting을 사용하는 것입니다. 즉 실행중인 실행 파일에서 잘 알려진 메서드를 검색하여 이 값을 기반으로 텍스트 상자의 값을 업데이트하십시오. 몇 가지 샘플의 Google .net 원격.

(.NET3 이상을 사용하는 경우) 또는 Tcp 또는 피어 2 피어 바인딩과 같은 WCF를 사용할 수 있습니다. 당신의 아키텍처에 대해 더 많이 알지 못한다면 나는 이것에 관해 더 많은 것을 말할 수 없습니다.

0

exe라고하면 프로세스 시작을 사용하여 콘솔 응용 프로그램을 실행하는 것입니까?

그렇다면 콘솔 앱의 출력을 얻어야합니다 (question 참조).

이것은 출력을 읽는 예제가있는 입력을 보내는 것입니다.

다른 옵션은 호출 클래스가 Windows 양식의 이벤트에 연결되도록하는 것입니다. 이벤트를 호출하면 폼이 텍스트 상자를 업데이트합니다.

관련 문제