2014-08-25 2 views
1

이 코드는 문제가 있습니다. Winform 응용 프로그램과 함께 .NET (C#)을 사용하고 있습니다.일시 중지 각 종료까지 C 내부 스레드 #

디렉토리 안에있는 파일들에 대한 각 루프마다 몇 가지 기능을 가진 스레드를 실행하고 싶습니다. 여기의 문제는 스레드가 완료 될 때까지 기다리지 않고 반복되는 결과입니다. 결과는 5 개의 파일이있는 경우입니다. 내 PC 동결을 만드는 서로 5 개의 스레드를 실행해라. 스레드가 끝날 때까지 루프를 일시 중지하고 다른 스레드에 대한 루프를 계속할 수 있습니까 ??

+1

병렬을 대신 사용하지 왜 예를를 들어

? – User2012384

답변

2

파일을 순차적으로 읽고 싶다면 스레드 전체를 움직여보십시오.

Thread threadConversion = new Thread(() => { 
    foreach (string f in Directory.GetFiles(txtPath.Text)) 
    { 
     //read file f 
    } 
}); 

threadConversion.Start(); 

또는 더 나은 아직, 사용 작업 :

await Task.Run(() => { 
    foreach (string f in Directory.GetFiles(txtPath.Text)) 
    { 
     //read file f 
    } 
}); 

//do some other stuff 
1

당신은 스레드와 같은 방법을 실행할 필요가 없습니다. 그냥 다음과 같이 실행 :

foreach (string f in Directory.GetFiles(txtPath.Text)) 
{ 
    function(parameter); 
} 
+0

나는 OP 스레드가 UI 스레드를 멈추지 않도록 다른 스레드에서 파일을 읽으려고한다고 추측하고 있습니다. – dcastro

+0

그는 foreach 전체를 다른 스레드에서 실행해야합니다. UI 작업이 없으므로 아무런 문제가 없어야합니다. –

+0

대답에서 제안한 것처럼 :-) –

0

당신은 Parallel.ForEach 방법을 사용할 수 있습니다 (당신이해야 적어도 버전의 .NET 4.0)

Parallel.ForEach(Directory.GetFiles(txtPath.Text), f=> 
       { 
       //some code 
       } 
       ); 
+1

Parallel.Foreach는 4.0에 이미 존재합니다 – ths

+0

@speising 당신이 맞습니다 :) 감사합니다. 나는 대답을 수정합니다. –

관련 문제