2013-08-21 2 views
0

이전 파일을 정리해야하는 응용 프로그램의 일부분을 작성하지만 일부는 상당히 크기 때문에 일부 작업을 수행하기 위해 일부 BackgroundWorkers를 시작합니다.BackgroundWorker 및 대용량 파일 삭제

  • 해당 파일에 어떤 일이 일어날 것, 그것은 잘못된 상태에 놀아 것입니다 : 나는 BackgroundWorker에 응용 프로그램 종료에에서는 FileInfo 개체에 File.delete를 호출을 호출하고 경우 내 질문은 무엇입니까?
  • 응용 프로그램이 중단 되나요, 아니면 BGWorker가 활성 상태로 유지됩니까?
  • 파일을 유효하지 않은 상태로 유지합니까?
  • 이 경우 BackgroundWorker가 올바른 클래스입니까?
+0

배경 작업자가 이러한 종류의 작업에 적합한 선택이라고 생각합니다. 아마 모든 질문에 답할 수는 없지만 여기에 몇 가지 답변이 있습니다. 배경 작업자가 다른 스레드를 실행하면 응용 프로그램이 멈추지 않습니다. 일단 백그라운드 작업자가 파일 처리를 시작하면 무효 상태가 될 수 있다고 생각합니다. 그래도 Task Parallel Library를 사용 해본 적이 있습니까? 기본적으로 똑같은 일을하지만 훨씬 쉬운 방법입니다. – qamar

+0

응용 프로그램이 예기치 않게 종료되고 이러한 파일이 실제로 커다란 걱정이된다면 삭제 대기열을 노출하는 Windows 서비스를 만들 수 있습니다. 이것은 실제로 backgroundWorker 래퍼가됩니다. 파일을 삭제하려면 파일이 유효하지 않다고 생각하는 이유는 무엇입니까? 아니면 정말로 삭제되었는지 확인하고 싶습니까? – mrtig

+0

그냥 실제로 대부분 사라 졌는지 확인하고 싶습니다. 예기치 않게 종료 될까봐 걱정하지 않지만 응용 프로그램 사용자가 삭제할 파일이 있다는 것을 모르고 응용 프로그램을 종료하기로 결정했을 수 있습니다. 가능한 한 투명하게 유지하고 싶습니다. – Craig

답변

0

좋아,이 문제를 해결하려면 Thread 개체를 사용하도록 전환했습니다. 전경 스레드를 만들고 모든 전경 스레드가 완료 될 때까지 응용 프로그램을 종료하지 않아야합니다.

불편을 끼쳐 드려 죄송합니다.

0

파일이 삭제 될 때까지 응용 프로그램 스레드를 대기 시키려면 AutoResetEvent와 결합 된 BackgroundWorker를 사용할 수 있습니다. 이것은 How to wait for a BackgroundWorker to cancel? 에서 설명

이 방법 (이 대답은 너무 취소에 대한 추가 정보가 포함되어 있습니다), 당신은 여전히 ​​ProgressChanged 및 RunWorkerCompleted 등 BackgroundWorker에 의해 노출 된 이벤트를 갖는 장점이있다.

물론 foreground thread를 만드는 것이 또 다른 해결 방법이며, 그들이 나올 때까지 주 스레드를 차단합니다. 그러나 가장 우아한 해결책은 아닐 수도 있습니다.