2010-04-22 5 views
1

내 C# 프로그램에서 프로세스를 사용하여 명령 행에서 외부 프로그램을 호출하고 표준 입력을 재 지정합니다. 외부 프로그램에 명령을 내린 후 3 초마다 상태를 확인하기 위해 다른 명령을 실행해야합니다. 프로그램은 InProgress 또는 Finished로 응답합니다. 가능한 한 효율적으로이 작업을 수행하는 데 도움이 필요합니다. 이 프로세스는 Windows 서비스에 의해 실행되는 장기 실행 작업의 상태를 확인합니다 (서비스와 직접 상호 작용할 수없는 세부 사항을 원하지 않는 이유 때문에). 각 명령이 끝나면 프로세스가 종료되지만 종료 코드는 항상 동일합니다. 결과. 당신은 지정된 간격으로 몇 가지 코드를 실행하기 위해 Timer을 사용할 수 있습니다C#에서 주기적으로 명령 행 출력을 확인하십시오.

http://msdn.microsoft.com/en-us/library/system.diagnostics.process.exited.aspx

http://msdn.microsoft.com/en-us/library/system.diagnostics.process.exitcode.aspx

+1

그래서 주기적으로 명령을 실행하는 방법이나 명령 줄에서 입력하는 방법을 묻는 중입니까? –

답변

2

사용 Process.Exited 이벤트 및 Process.ExitCode 속성

예를 들어

Process.StandardOutput 프로세스의 출력을 읽으려면 :

Timer timer = new Timer(_ => 
{ 
    Process p = new Process(); 
    p.StartInfo.UseShellExecute = false; 
    p.StartInfo.RedirectStandardOutput = true; 
    p.StartInfo.FileName = "foobar.exe"; 
    p.Start(); 

    string output = p.StandardOutput.ReadToEnd(); 
    p.WaitForExit(); 

    switch (output) 
    { 
    case "InProgress": 
     // ... 
     break; 

    case "Finished": 
     // ... 
     break; 
    } 
}); 

timer.Change(TimeSpan.FromSeconds(0), TimeSpan.FromSeconds(3)); 
+0

종료 코드는 항상 같습니다. – kjv

+0

나는 OP가 프로세스가 끝났는지를 결정하는 방법을 원했던 것 같다. 다른 프로세스를 사용하는 이유. 나는 여기에가는 길은 프로세스의 종료 된 이벤트를 사용하는 것입니다. – Midhat

+0

@iulianchira 그러면 TEH에 대해 엑스터 한 이벤트 – Midhat

2

및 :

+0

-1이 필요할 것입니다. j/k –

관련 문제