2011-12-14 3 views
0

멀티 스레딩 문제가 있습니다. 사례 : 다른 웹 사이트에서 사진을 다운로드하려고 exe를 작성 중입니다. 다른 서버에서 오는 사진이 1000 개이기 때문에 멀티 스레딩을 구현했지만 제대로 작동하지 않습니다.
Main()에서 메소드를 호출했습니다. ThreadMain(); 로 명명하고 ThreadMain(); 함수에서는exe에서 멀티 스레딩을 사용하여 문제가 발생했습니다

ThreadStart jobOne = new ThreadStart(ThreadOne); 
      Thread threadOne = new Thread(jobOne); 
      // Start the thread 
      threadOne.Start(); 
ThreadStart jobTwo = new ThreadStart(ThreadTwo); 
      Thread threadTwo = new Thread(jobTwo); 
      threadTwo.Start(); 
ThreadStart jobThree = new ThreadStart(ThreadThree); 
      Thread threadThree = new Thread(jobThree); 
      threadThree.Start(); 

등 10 개까지의 스레드

정적 무효 ThreadOne 등이어서 상기 우리 정의한 정적 메소드(),174 같은 열 개 쓰레드로 작업을 분할 한{ 데이터베이스 작업 }

정적 무효 ThreadTwo() { 데이터베이스 작업 }

정적 무효 ThreadThree() { 데이터베이스 작업 }

10 일 개까지

그러나 완료 한 후 스레드, 콘솔 창 자체를 닫지 않습니다 또는 스레드가 완료되었는지 여부를 알 수 없습니다? 조언을주십시오

+0

당신에 스레드를 기다릴 가입 사용하고 끝? – Tudor

답변

1

배경 작업자를 사용하십시오.

이들은 프로그램에서 실행되는 특별한 종류의 스레드입니다. 백그라운드 작업자의 "Progress"속성을 사용하여 다른 방법으로 진행 상황을보고하고 메서드에서 필요한 기준을 계산하고 스레드가 닫혀 있는지 확인한 다음 마지막으로 프로그램을 닫을 수 있습니다.

만약 당신이 프로그램의 구조를 바꾸고 싶지 않다면 다른 방법은 "watcherThread"라고 불리는 또 다른 스레드를 가지게 될 것입니다. (와트를 원하는만큼 호출 할 것입니다.)이 스레드는 3 초 또는 5 초의 간격으로 계속 실행합니다 일반적인 실행 시간에 따라 다른 모든 스레드의 isRunning 속성이나 다른 모든 스레드의 threadState 속성을 확인하고 모든 스레드가 완전히 실행되었다는 것을 알고 나면 "environment.exit (0);"을 사용하여 창을 안전하게 닫을 수 있습니다.

일부 참조

http://msdn.microsoft.com/en-us/library/cc221403(v=vs.95).aspx http://www.dotnetperls.com/backgroundworker

http://midnightprogrammer.net/post/Using-Background-Worker-in-C.aspx http://csharptuning.blogspot.com/2007/05/background-worker.html

+0

"배경 작업자"에 대한 참고 자료를 제공 할 수 있습니까? – rakeshwalia

+0

참조를 포함하도록 내 대답을 편집했습니다. – swordfish

관련 문제