2011-09-28 4 views
0

흥미로운 문제가 발생했습니다.프로세스 재사용 - async BeginOutputReadLine 문제

C#을 (MSDN)에 따라 프로세스 자원을 재사용 할 수 있습니다 - 그래서 예를 시작() 프로세스가 완료된 후 메서드를 호출 :

Process p = new Process(); 
// init 
p.Start(); 

그리고 나중에 시간 : 내가 가지고있는

p.Kill(); 
// not important 
p.Start(); 

을 동기화 읽기를 수행하는 스레드가 모두 정상적으로 보인다 - 첫 번째 및 두 번째 Start() 호출 후 출력이 읽혀지고 있습니다.


이제 재미있는 일. 비동기 읽기 (모든 것이 올바르게 초기화 됨)를 사용할 때 :

p.BeginOutputReadLine(); 

출력은 첫 번째 Start() 호출 이후에만 읽혀집니다. 두 x 째 호출 프로세스가 리디렉션되지 않고 시작됩니다.

내가 취소를 한 번 더 시작 호출 시도했다 :

p.CancelOutputRead(); 
p.Kill(); 
// not important 
p.Start(); 
p.BeginOutputReadLine(); 

를 같은 결과.

일부 기계 세부 정보 : - 그것은 어떤 프레임 워크 버그 또는 Process.Start를 내 오해 승 7 얼티밋 86 SP1 (CPU도 86)는, .NET 2.0/3.0 VS 2008

질문입니다 테스트 정의 ("이 프로세스 구성 요소의 StartInfo 속성으로 지정된 프로세스 리소스를 시작 (또는 재사용)하고 구성 요소와 연결합니다.")? 어떤 도움을 많이 주셨습니다.

솔루션이 프로세스 개체를 다시 작성한다고 가정하지만 느려질 것입니다.

답변

0

Kill을 호출하면 을 호출하기 전에 OutputDataReceived에 대한 이벤트 처리기를 다시 추가해야합니다.

+0

아니요, StartInfo 및 Process 필드를 재설정했지만 여전히 작동하지 않습니다. 필자는 외부 실행 파일이나 코드없이 테스트 용으로 작은 코드 (약 50 줄의 코드)를 작성했습니다. – marchewek