Friday 9 February 2018

대기 오염 후 출력 데이터 수신


시장 뉴스 forex 달력입니다.


스톡 옵션 세금 w2.


대기 데이터 이후에 출력 된 데이터.


프로세스 구성 요소가 관련 프로세스가 종료 될 때까지 무기한 대기하도록 지시합니다. 프로세스 ID가 설정되지 않았으며 존재하지 않으면 Id 속성을 결정할 수있는 핸들이 없습니다. 이 Process 개체와 연결된 프로세스가 없습니다. 원격 컴퓨터에서 처리중인 프로세스 후에 WaitForExit를 호출하려고합니다. 이 방법은 로컬 컴퓨터에서 실행중인 프로세스에만 사용할 수 있습니다. WaitForExit은 관련 프로세스가 종료 될 때까지 현재 스레드를 대기 상태로 만듭니다. 그것은 waitforexit 이후 다른 프로세스가 호출 될 때 출력되어야합니다. 현재 스레드를 차단하지 않으려면 Exited 이벤트를 사용하십시오. 이 메서드는 Process 구성 요소에 프로세스 및 이벤트 처리기가 종료 될 때까지 무한한 시간 동안 대기하도록 지시합니다. 이 waitforexit로 인해 응용 프로그램 출력 데이터 수신 응답이 중지됩니다. 예를 들어 사용자 인터페이스가있는 프로세스에 대해 CloseMainWindow를 호출하면 outputdatareceived에 쓰여진 프로세스 출력 데이터가 메시지 루프에 들어가면 연관된 프로세스를 종료하라는 운영 체제의 요청이 처리되지 않을 수 있습니다. 또한 이전 버전에서는 최대 MaxValue 시간이 지난 후에 출력 데이터 수신 이벤트 핸들러가 종료 될 때까지 기다리지 않았습니다. 이 과부하는 리디렉션 된 표준 출력에 대한 비동기 이벤트 처리를 포함하여 모든 처리가 완료된 후에 수행되도록합니다. 표준 출력이 비동기 이벤트 처리기로 리디렉션되었을 때 WaitForExit Int32 오버로드를 호출 한 후에이 오버로드를 사용해야합니다. 연관된 프로세스가 종료 될 때, 즉 비정상 종료 또는 후속 종료를 통해 운영 시스템에 의해 종료 될 때 대기 시스템은 프로세스에 대한 관리 정보를 저장하고 WaitForExit을 호출 한 구성 요소로 리턴합니다. 그런 다음 프로세스 구성 요소는 종료 된 프로세스에 대한 핸들을 사용하여 ExitTimeby를 포함하여 출력 된 정보를 액세스 할 수 있습니다. 연결된 프로세스가 종료되었으므로 waitforexit이 아닌 구성 요소의 Handle 속성은 기존 프로세스 리소스를 가리 킵니다. 대신 핸들은 프로세스 자원에 대한 운영 체제의 정보에 액세스하는 데에만 사용할 수 있습니다. 시스템은 Waitforexit 구성 요소가 릴리스하지 않은 종료 프로세스에 대한 핸들을 인식하므로 Process 구성 요소가 리소스를 특별히 해제 할 때까지 ExitTime 및 Waitforexit 정보를 메모리에 유지합니다. 이러한 이유로 프로세스 인스턴스에 대해 Start를 호출 할 때마다 연관된 프로세스가 종료되고 이후에 더 이상 관리가 필요하지 않으면 Close를 호출하십시오. 닫기는 종료 된 프로세스에 할당 된 메모리를 해제합니다. StandardError 속성 참조 출력의주의 섹션을 참조하십시오. 다운로드 Visual Studio SDK 평가판 소프트웨어 다운로드 후 Office 리소스 SharePoint Server 리소스 SQL Server Express 리소스 Windows Server waitforexit 프로그램 구독 개요 관리자 Waitforexit Microsoft Microsoft Student Partner ISV 시작 이벤트 Waitforexit Magazine Forums 블로그 채널 9 문서 API 및 참조 출력 데이터 수신 센터 샘플 휴지 콘텐츠. 요청하신 콘텐츠가 삭제되었습니다. 프로세스 클래스 프로세스 메서드 WaitForExit 메서드. WaitForExit 메서드 WaitForExit 메서드입니다. waitforexit 컨텐츠 테이블을 축소하십시오. 이 문서는 보관되었으며 유지 관리되지 않습니다. NET Framework 현재 버전. 예외 조건 Win32Exception 대기 설정에 액세스 할 수 없습니다. LinkDemand 직접 실행 호출자의 완전한 신뢰. 이 멤버는 부분적으로 신뢰할 수있는 코드에서 사용할 수 없습니다. NET Framework이 페이지는 도움이 되었습니까? 의견을 보내 주셔서 감사합니다. 데브 센터 Windows Office Visual Studio Microsoft Azure 기타 학습 리소스 Microsoft Virtual Academy Channel 9 MSDN Magazine. 커뮤니티 포럼 블로그 Codeplex. 벤처 기업을위한 BizSpark Microsoft 학생들에게 상상해보십시오.


로드 스트로크 양과 심장 출력 후 예비 하중 1 부.


waitforexit & rdquo 후 출력 데이터를 5 개에 대해 & ldquo;


나는 구속을 제안하지 않는 그러한 운을 쓰고 싶지만, 반대로 야생의 자유를 쓴다.


생존자와 지도자로서 누가 이방의 바다에서 출현 할 것인가?


이 함수는 Brim과 Brackus에 의해 추가되었으며 Lizel을 통해 그 힘에 대해 알아 냈습니다.


로디 가든, 후마윤 무덤, 아크샤 르담 사원 (Viator와 함께 온라인 예약) 등 Mughal 헤리티지 투어.


이탈리아 종속 연결 관 (congiunzioni subordinative)은 종속 조항을 다른 조항 †""교장 또는 독립적 인 조항 †"로 변경하여 그 의미를 수정, 완성 또는 명확히합니다.


사용 예제.


나는이 방법으로 그것을 해결했다.


나는 입력, 출력 및 오류 모두를 리디렉션하고 출력 및 오류 스트림에서 읽기를 처리했습니다. 이 솔루션은 Windows 7과 Windows 8 모두 SDK 7 - 8.1에서 작동합니다.


Mark Beers, Rob, stevejay 대답을 고려하여 비동기 스트림 읽기를 사용하여 문제를 해결할 클래스를 만들려고했습니다. 그렇게하면 비동기 프로세스 출력 스트림 읽기와 관련된 버그가 있음을 알았습니다.


당신은 그렇게 할 수 없습니다 :


System. InvalidOperationException이 발생합니다 : StandardOut가 리디렉션되지 않았거나 프로세스가 아직 시작되지 않았습니다.


그런 다음 프로세스가 시작된 후 비동기 출력 읽기를 시작해야합니다.


이렇게하면 출력 스트림이 비동기로 설정되기 전에 데이터를받을 수 있기 때문에 경쟁 조건을 만듭니다.


그렇다면 어떤 사람들은 스트림을 비동기로 설정하기 전에 스트림을 읽어야한다고 말할 수 있습니다. 그러나 같은 문제가 발생합니다. 동기 읽기 사이에 경쟁 조건이 있으며 스트림을 비동기 모드로 설정합니다.


"Process"와 "ProcessStartInfo"가 설계된 실제 방식으로 프로세스의 출력 스트림을 안전하게 비동기 적으로 읽는 방법은 없습니다.


다른 사용자가 제안한 것과 같이 비동기 읽기를 사용하는 것이 좋습니다. 그러나 경쟁 조건으로 인해 정보가 누락 될 수 있음을 알고 있어야합니다.


위의 답변 중 하나도 해당 작업을 수행하지 않습니다.


롭 솔루션이 중단되고 'Mark Byers'솔루션이 폐기 된 예외를 얻습니다. (다른 답변의 "솔루션"을 시도했습니다.)


그래서 나는 또 다른 해결책을 제안하기로 결정했다.


이 코드는 디버깅되어 완벽하게 작동합니다.


이것이 간단하고 더 나은 접근 방법입니다 (우리는 AutoResetEvent가 필요 없습니다) :


나는 같은 문제가 있었지만 그 이유는 다르다. 그러나 Windows 8에서는 발생하지만 Windows 7에서는 발생하지 않습니다. 다음 줄이 문제를 일으킨 것으로 보입니다.


해결책은 UseShellExecute를 비활성화하지 않는 것입니다. 원하지 않는 쉘 팝업 창을 받았지만 특별한 일이 일어나지 않을 때까지 기다리는 프로그램보다 훨씬 낫습니다. 그래서 다음과 같은 해결 방법을 추가했습니다.


이제 나를 귀찮게하는 것은 Windows 8에서 왜 이런 일이 일어나고 있는지입니다.


소개.


현재 허용되는 응답이 작동하지 않고 (예외가 throw 됨) 해결 방법이 너무 많지만 완전한 코드가 없습니다. 이것이 대중적인 질문이기 때문에 많은 사람들의 시간을 낭비하는 것은 분명합니다.


Mark Byers의 대답과 Karol Tyl의 대답을 결합하여 Process. Start 메서드를 사용하는 방법을 기반으로 전체 코드를 작성했습니다.


git 명령을 통해 진행 대화 상자를 만드는 데 사용했습니다. 이것이 내가 그것을 사용한 방법입니다 :


이론적으로 stdout과 stderr를 결합 할 수도 있지만 테스트하지는 않았습니다.


나는 이것이 늙다는 것을 알고 있지만이 전체 페이지를 읽은 후에는 해결할 수있는 코드가 없기 때문에 무하마드 레 한 (Muhammad Rehan)을 시도하지는 않았다. . 그것이 완전히 진실하지 않은 경우 작동하지 않는다고 말할 때 가끔은 잘 작동 할 것입니다. EOF 마크 전에 출력의 길이와 관련이 있다고 생각합니다.


어쨌든, 나를 위해 일한 솔루션은 다른 스레드를 사용하여 StandardOutput 및 StandardError를 읽고 메시지를 작성하는 것이 었습니다.


희망이 사람을 도울 수 있기를 바랍니다, 누가 그렇게 열심히 수 있다고 생각!


내부 타임 아웃과 생성 된 애플리케이션에 의한 StandardOutput 및 StandardError의 사용으로 인해 다른 솔루션 (EM0를 포함하여)은 여전히 ​​내 애플리케이션에 대해 교착 상태입니다. 여기 나를 위해 일한 것입니다 :


편집 : StartInfo의 초기화를 코드 샘플에 추가했습니다.


이 게시물 어쩌면 구식하지만 난 왜 그것이 일반적으로 끊어지는 주된 원인은 redirectStandardoutput에 대한 스택 오버 플로우 때문이거나 redirectStandarderror가있는 경우입니다.


출력 데이터 또는 오류 데이터가 크기 때문에 무한정 지속되는 동안 정지 시간이 발생합니다.


그 결과, 콩코드가 나타납니다.


이 문제를 해결하기 위해 문제를 재현하기 위해 소스 코드가 필요하므로 집에서 문제를 조사 할 수 있습니다. 프로젝트의 전체 소스를 보낼 필요는 없습니다. 문제를 재현하기 위해 가장 간단한 샘플 만 있으면됩니다. 모든 기밀 정보 또는 비즈니스 논리를 제거 할 수 있습니다.


StandardOutput에서 읽는 것은 정말 까다 롭습니다. 문제는 동시에 오류 스트림에서 읽어야한다는 것입니다. 끊임없이 양쪽에서 읽지 않는다면 버퍼 중 하나가 가득 차게되고 프로세스가 읽는 것을 기다릴 때 멈추는 것처럼 보일 것입니다. 이 때문에 스트림에서 ReadToEnd를 호출 할 수 없습니다.


나는 이것을 일반적인 경우에 대해 한 번 실제로 풀었고 나는 그 코드의 복사본을 보관할 생각이 없기 때문에 내가 생각할 때마다 자신을 걷어차웠다. 결과를 메인 쓰레드로 되돌려 줄 출력과 에러 스트림을 처리하는 두 개의 리더 쓰레드를 갖게되었다.


그래도 도움이 필요하면 내일에 달려들 수 있습니다.


다른 명령 행 프로세스에서 출력을 읽는 방법을 보여주는 코드 예제를 작성했습니다.


static void Main (string [] args)


문자열 exeFileName = "output. exe" ;


ProcessStartInfo 정보 = 새로운 ProcessStartInfo (exeFileName);


// 프로세스의 표준 출력을 리디렉션합니다.


정보. RedirectStandardOutput = true;


정보. RedirectStandardError = true;


// 리디렉션을 위해 UseShellExecute를 false로 설정합니다.


정보. UseShellExecute = false;


프로세스 proc = 새 프로세스 ();


proc. StartInfo = 정보;


// 정렬 처리 출력을 비동기 적으로 읽도록 이벤트 핸들러를 설정합니다.


proc. OutputDataReceived + = 새 DataReceivedEventHandler (proc_OutputDataReceived);


proc. ErrorDataReceived + = 새 DataReceivedEventHandler (proc_ErrorDataReceived);


// 정렬 출력 스트림의 비동기 읽기를 시작합니다. 이 줄을주의하십시오!


static void proc_ErrorDataReceived (개체 보낸 사람, DataReceivedEventArgs)


콘솔. WriteLine ( "오류 :", 즉 데이터);


static void proc_OutputDataReceived (개체 보낸 사람, DataReceivedEventArgs)


콘솔. WriteLine ( "출력 데이터 :", 즉 데이터);


희망이 도움이!


글쎄, 내가 해왔 던 방식보다 확실히 쉽다.


나는 이것을 일반적인 경우에 대해 한 번 실제로 풀었고 나는 그 코드의 복사본을 보관할 생각이 없기 때문에 내가 생각할 때마다 자신을 걷어차웠다. 결과를 메인 쓰레드로 되돌려 줄 출력과 에러 스트림을 처리하는 두 개의 리더 쓰레드를 갖게되었다.


이 문제는 MSDN 설명서 (및이를 뒷받침하는 자체 테스트)에 따르면 & quot; 프로세스 클래스의 모든 인스턴스 멤버는 스레드 안전성이 보장되지 않습니다. & quot;라는 문제가 있습니다. 따라서 멀티 스레딩 솔루션은 이론상 작동하지 않아야합니다. 그것은 확실히 석사에 의해 권고되지 않습니다. 생각해 줘서 고마워.


다른 명령 행 프로세스에서 출력을 읽는 방법을 보여주는 코드 예제를 작성했습니다.


고마워. 이것은 실제로 작동하는 것 같습니다 (예!). 그러나 동기식으로 만. 이 메소드를 사용하여 프로세스의 모든 stdout 및 stderr 출력을 안정적으로 가져올 수 있지만 반환 전에 프로세스가 종료 될 때까지 코드를 기다려야합니다. 한 번에 하나의 프로세스 만 처리하려는 경우 좋으므로 이는 좋은 시작입니다. 불행히도, 궁극적 인 목표는 여러 프로세스를 동시에 처리 할 수 ​​있다는 것이 었습니다. 이는 각 프로세스에이 코드를 호출하는 새로운 스레드를 만드는 것을 의미합니다. 문제는 앞서 언급했듯이 Process 클래스 인스턴스 멤버는 스레드로부터 안전하지 않으므로 수행 할 수 없다는 것입니다.


모두의 도움에 감사 드리며, 이제는이 문제를 동기식으로 해결하는 방법을 알고 있습니다. 그러나 비동기 적으로 수행 할 수있는 방법이있는 경우 (즉, 여러 프로세스를 처리하는 몇 가지 스레드를 실행 한 다음 UI를 응답 성있게 유지하기 위해 즉시 반환), 그렇게하는 방법에 대해 듣고 싶습니다. . 그 사이에, 나는 동기식으로 이것을해야만 할 것입니다.


실제로 두 이벤트 핸들러 함수는 CLR의 백그라운드 스레드에 의해 비동기 적으로 호출되었습니다. 그리고 여러 프로세스를 청취하고 싶다면 왜 여러 Process 클래스 객체를 사용하지 않을까요? 이벤트 핸들러 함수를 사용하여 여러 이벤트 소스의 이벤트를 처리 할 수 ​​있습니다.


Feng, 출력 & quot; 이후 & quot; 만 필요한 경우이 방법이 좋습니다. proc. WaitForExit ()를 호출했습니다.


나는 그 동안 "& quot; 동안 & quot; 내 ftp 프로세스.


아래 참조, 내가 OPEN 명령을 보낸 후에, 나는 무엇을 볼지를 점검 할 필요가있다.


서버의 리턴 코드가있었습니다.


그것이 220이라면, 나는 나의 사용자 이름과 암호를 제출하고, 그 다음에 나는 볼 필요가있다.


나는 200 개의 코드를 되찾았다.


찾는 경우 DataReceivedEventHandler (FTPProcess_OutputDataReceived)


이벤트는 WaitForExit이 끝날 때까지 시작되지 않습니다. 이는 내 필요를 늦추는 방법입니다.


StandardOutput에서 실시간 데이터를 얻는 방법에 대한 아이디어가 있습니까?


//. 설치 프로세스 코드.


개인 부울 설정 ()


FTPProcess. OutputDataReceived + = 새 DataReceivedEventHandler (FTPProcess_OutputDataReceived);


FTPProcess. ErrorDataReceived + = 새 DataReceivedEventHandler (FTPProcess_ErrorDataReceived);


개인 bool LoginToServer ()


// FTP-Process에 명령을 보냅니다.


FTPStreamWriter. WriteLine ( "OPEN"+ this ._FtpServerAddress);


bool success = false;


// ftp 서버에 성공적으로 접속했다면.


FTPStreamWriter. WriteLine (& quot; USER & quot;이 ._UserName + & quot; + this ._Password);


// 우리는 성공적으로 로그인했다면.


개인 무효 FTPProcess_OutputDataReceived (개체 sendingProcess, DataReceivedEventArgs 출력)


if (! string. IsNullOrEmpty (output. Data))


개인 무효 FTPProcess_ErrorDataReceived (개체 sendingProcess, DataReceivedEventArgs 오류)


if (! string. IsNullOrEmpty (error. Data))


Exited 이벤트는 마지막 OuputDataReceived 이벤트 전에 발생합니다. 따라서 마지막 OutputDataReceived 이벤트가 언제 도착했는지 알 수 없습니다 (ErrorDataReceived의 경우도 마찬가지 임).


string command = "output. exe" ;


문자열 인수 = & quot; 무엇이든 & quot; ;


proc. OutputDataReceived + = 새 DataReceivedEventHandler (proc_OutputDataReceived);


proc. ErrorDataReceived + = 새 DataReceivedEventHandler (proc_ErrorDataReceived);


proc. Exited + = 새 EventHandler (proc_Exited);


Console. WriteLine ( "Exited (Event)");


Console. WriteLine (& quot; Error : & quot;, e. Data);


Console. WriteLine ( "Output data :", e. Data);


따라서 스트림이 닫히고 이탈 이벤트를 잡는다면 exit + IO 완료를 정확하게 감지 할 수 있습니다.


& lt; 예, 이것이 낡은 스레드라는 것을 알고 있습니다 & gt;


데이터가 null이거나 비어 있는지 확인하는 것이 가장 좋은 방법은 아닙니다. 실행중인 프로그램이 빈 문자열을 출력하고있을 가능성이 있습니다.


내가 알 수있는 한, 입출력 이벤트가 언제 완료되었는지 알 수있는 확실한 방법이 없다. 심지어 "elggarc" 위의 대답은 이것을 보장하지 않습니다.


내가 찾은 유일한 방법은 돌아 오기 전에 잠깐 주무실을 자도록하는 것입니다. 위의 대답을 취하는 예 :


pbyrne 편집자 2011 년 3 월 3 일 목요일 오후 10:34 fix code example.


설명서 BeginOutputReadLine에 대해 말합니다 :


응용 프로그램의 리디렉션 된 StandardOutput 스트림에서 비동기 읽기 작업을 시작합니다.


그러나 stderr와 stdout을 모두 재지향하려고합니다. BeginOutputReadLine () 만 호출해도 stderr에서 메시지를 읽습니까?


큰 파기 후에 이것은 최고의 것입니다.


public static void Test ()


System. Diagnostics. Process winscp = new System. Diagnostics. Process ();


string result = RunCommand (winscp, "Dir");


결과 = RunCommand (winscp, "Dir");


결과 = RunCommand (winscp, "Dir");


결과 = RunCommand (winscp, "Dir");


결과 = RunCommand (winscp, "Dir");


스레드 threadToKill = null;


Func & lt; System. IO. StreamReader, StringBuilder, string & gt; wrappedAction = (reader, sb) = & gt;


int cnt = reader. Peek ();


char [] buffer = 새 char [cnt];


int rcnt = reader. Read (버퍼, 0, cnt);


StringBuilder sbresult = 새 StringBuilder ();


IAsyncResult result = wrappedAction. BeginInvoke (winscp. StandardOutput, sbresult, null, null);


if (result. AsyncWaitHandle. WaitOne (new TimeSpan (0, 0, timout)))


Microsoft는 Msdn 웹 사이트에 대한 귀하의 의견을 이해하기 위해 온라인 설문 조사를 실시하고 있습니다. 참여를 선택하면 Msdn 웹 사이트를 탈퇴 할 때 온라인 설문 조사가 제공됩니다.


다중 상속.


많은 물건에서 파생되었습니다.


프로세스 비동기 OutputDataReceived / ErrorDataReceived에는 프롬프트를 처리 할 때 결함이 있습니다.


System. Diagnostics. Process 클래스 - 2 부.


Part 1에서는 stdout / stderr 리디렉션을 사용하여 동기식으로 읽는 문제에 대해 설명했습니다. 출력 버퍼가 가득 차서 다음 "쓰기"에서 하위 프로세스를 차단할 수 있습니다. 부모 프로세스가 버퍼에서 데이터를 읽기 전에 자식 프로세스가 종료 될 때까지 기다리고 있기 때문에 교착 상태가 발생합니다. 버퍼가 가득 차서 자식 프로세스가 블록킹하여 교착 상태가 발생합니다. 대답은 간단합니다 & # 8211; stdout / stderr에서 데이터를 읽는 비동기 메서드를 사용하는 것이 가장 좋습니다. 이 문제는 예견 할 수 있으며 나쁘다.


내가 아니라 너야.


나는 다른 교착 상태에 빠져 들었다. 그것은 같은 교착 상태로 보였다. 마이크로 소프트의 Process 클래스 구현에서 잘못된 가정은 부모 프로세스와 자식 프로세스 사이에 다른 유형의 교착 상태를 야기했다. 자녀 과정에서 요청한 활동을 확인하도록 요청한 경우이를 발견했습니다 (그림 1 참조).


프롬프트는 줄 바꿈없이 끝나고 프롬프트의 끝 부분에 커서를 놓아 두었습니다 (이는 커서가 화면 아래에 프롬프트가 아닌 옆에 설정되는 이유입니다). 이 프롬프트의 예제 코드는 그림 2를 참조하십시오.


내 부모 프로세스는 비동기 적으로받은 stdout 데이터를 검사하여 프롬프트를 찾도록 코딩되었습니다. 프롬프트가 수신 된 경우, 부모 프로세스는 자식 프로세스의 표준 입력에 대한 응답을 내 보냅니다. 그림 3을 참조하십시오.


그러나 부모 프로세스를 실행하고 자식 프로세스가 프롬프트를 보낸 경우 텍스트가 OutputDataReceived 이벤트에 들어오지 않았습니다 ... 그리고 부모 프로세스가 p. WaitForExit () 행에 영원히 앉아있었습니다 ... 자식 프로세스가 절대로 응답을 기다리고있었습니다 부모로부터, 그리고 우리는 다시 교착 상태에 빠졌습니다. 이번에는 제가 아니 었습니다 .... 문제는 제 코드에 없습니다.


NewLine 없음, DataReceivedEvent 없음 ...


디버깅을 시작하고 OutputDataReceived 이벤트를보고 다양한 방법으로 하위 프로세스 코드를 변경하기 시작했습니다. 아래의 작은 변화로 인해 OutputDataReceived 이벤트가 프롬프트 텍스트로 실행되었습니다 (그림 4 참조).


다른 테스트에서는 NewLine이 자식 프로세스의 출력에있을 때만 OutputDataReceived 이벤트가 발생하는 것처럼 보입니다. NewLine이없는 프롬프트는 OutputDataReceived 이벤트를 발생시키지 않으므로 상위 프로세스가 프롬프트를받지 못하고 응답 할 수 없습니다. 이중 자물쇠!


내 자신의 비동기 stdout / stderr 읽기 구현.


내 코드가 아닌 타사 콘솔 응용 프로그램에서 프롬프트를 읽어야하므로 궁극적으로 NewLine을 사용하지 않고 프롬프트를받을 수 있어야했습니다. 이 문제를 해결하려면 내 자신의 Async IO 클래스를 구현하여 stdout / stderror 프로세스를 읽어야했습니다.


StdStreamReader라는 클래스를 작성하여 스트림을 읽고 기본적으로 Process OutputDataReceived 이벤트와 유사한 이벤트를 발생 시키지만 NewLine을 해제하여 데이터 수신 이벤트를 발생시키지 않고 대신 데이터를 수신하자마자 실행합니다. 그림 5에서 새로운 리더 클래스를 사용하여 상위 프로세스 코드의 코드 차이를 강조했습니다.


StdStreamReader의 코드는 매우 평범한 것이지만 결과는 예상대로였습니다 (그림 6 참조).


프롬프트 바로 다음에 "예"가 표시되지 않았습니다. 이는 자식 프로세스 stdin에 직접 전송 되었기 때문에 표시 되었기 때문입니다.


어떤 종류의 보증도없이 "있는 그대로"제공되는 전체 소스 코드를 보려면를 클릭하십시오.


이 공유:


관련.


소식 탐색.


회신을 남겨주 답장을 취소하십시오.


좋은 작품, 내가 찾던 정확한 해결책이다. 소스 코드를 제공해 주셔서 감사합니다!


고마워요, 남자! 분명히이 문제는 4 년 후에도 여전히 관련이 있습니다. 많이 도와 줬어.

No comments:

Post a Comment