스레드/백그라운드 프로세스에서 머리를 감싸는 데 최악의 시간을 보내고 있습니다. 내 문제는 어느 정도 공통점이 있지만 내 요구를 충족시키는 좋은 예를 아직 찾지 못했습니다.Process.Start in BackgroundWorker C#
고전적인 예는 다음과 같습니다.
특정 장기 실행 작업/프로세스가 실행될 때 UI가 정지됩니다. - 적어도 UI를 이동/최소화 할 수 있어야합니다.
클래식 응답에는 스레딩 및 작업 팩터 리 및 BackgroundWorker 솔루션이 포함됩니다. 하지만 구현 방법에 관계없이 결과가 좋지 않습니다.
내 프로그램에서 다른 응용 프로그램을 실행하고 끝내기를 기다리고 있습니다. 간단하게하기 위해이하지 말라의 내가 지금처럼하고 있어요 말 : WaitForExit()
날 메모장을 닫습니다 기다리고 멀리 갈기 동안
Process p = Process.Start("notepad.exe somefile.txt");
p.WaitForExit();
//read somefile.txt
은 분명히 내 응용 프로그램의 UI가 놀았어요.
나는이 주위에 제안 수단의 번호를 시도했지만 내가 두 코너 중 하나에 그린 얻을 : 나는 메모장을 닫을 때
내 인터페이스는 여전히 중단- , 다음 somefile.txt 잘 읽습니다.
- 을 맡은 프로세스 (메모장) 잘 실행하지만 내 응용 프로그램은 somefile.txt 바로 내가 메모장 (그래서 내가 비동기 실행의 생각) 나는 높은 번호 - 간단한에 계산 관련 참조
대부분의 예를하지만 폐쇄하기 전에 읽어 내가하는 일이 아니야. 이 "외부"프로세스를 해고하면 다소 복잡해집니다.
시간 내 주셔서 감사드립니다.
:
는 그런 다음 핸들러가 UI 스레드가 아닙니다. –
코드의 나머지 부분을 보여 주거나, 메모장을 시작할 최소한의 프로그램을 보여주고, 배경 작업자를 사용하고, 여전히 멈춰 있어야합니다. –
* BackgroundWorker *를 사용하고 worker의 * AfterCompleted * 처리기에서 somefile.txt를 읽으려고 했습니까? –