2017-12-08 1 views
0

나는 HTML 소스를 가져 와서 파싱 중입니다. 그 후, 나는 이미지를 다운로드하고 싶다. 나는 그들을 다운로드한다. 그러나 다운로드하지 않는 경우도 있습니다. 왜냐하면 내가 필요로하는 쓰레드 나 병렬 프로그래밍을 사용할 수 없기 때문에 나는 모른다. 내 출처 :url에서 순서대로 이미지 다운로드

foreach(var pic in pics) 
     { 
      try { 
      client.DownloadFileCompleted += new AsyncCompletedEventHandler(client_DownloadFileCompleted); 
       client.DownloadFileAsync(new Uri(pic.Attributes[cmbAttr.Text].Value), folder + "\\" + picid.ToString() + ".jpg"); 

      System.Threading.Thread.Sleep(1500); // I wrote sleep code, because i dont know parallel programming. But sometimes it is not downloading in 1500 milisecond. 

      picid++; 
      }catch(Exception err) 
      { 
       label8.Text=(err.Message.ToString()); 
       continue; 
      } 
     } 

이것은 내 코드입니다. 나는 순서대로 사진을 다운로드하고 싶다. 1.jpg, 2.jpg 등 내가 다운로드합니다. 그러나 때로는 오류가 발생합니다. 완료되기 전에 마지막으로 다운로드하는 동안 다른 다운로드가 시작되기 때문입니다. 마지막 다운로드를 마친 후 시작하겠습니다. 내 영어가 나쁘다. 나는 그것이 진실이라고 말하기를 바란다. 도움 주셔서 감사합니다. 루프에서`;

+1

그리고 비동기 – gogaz

+0

제거'client.DownloadFileCompleted + = 새 AsyncCompletedEventHandler (client_DownloadFileCompleted을)를 다운로드를 중지. 'pics.length' 이벤트 핸들러는 필요 없습니다. 한 번 첨부 할 곳에 어딘가에 추가하십시오. – JohanP

+0

1500ms 후에 다운로드 할 새 작업을 시작합니다. a) 다운로드 작업을 기다리거나 b) 전화를 걸면 수면이 필요하지 않습니다. 완료되면 돌아올 파일 다운로드 –

답변

0
client.DownloadFileCompleted += new AsyncCompletedEventHandler(client_DownloadFileCompleted); 

foreach(var pic in pics) 
{ 
    Task.Factory.StartNew(Object state => 
    { 

     var data = (dynamic)state; 
     Int32 id = (Int32)state.Id; 
     Picture picture = (Picture)state.Picture; 

     client.DownloadFile(new Uri(picture.Attributes[cmbAttr.Text].Value), folder + "\\" + id.ToString() + ".jpg") 

    }, new { Id = picid, Picture = pic }); 

    ++picid; 
} 
관련 문제