none
Resim İndirme Uygulaması Threading Sorunu RRS feed

  • Soru

  • Merhaba. Bir site için resim indirme botu yazıyorum. Bir resim inmeden diğerini indirmeye çalışında hata veriyor. Bende kafadan bir bekleme süresi koydum Thread.Sleep ile ve bu sorunu birazda olsa çözdü. Ancak internetim yavaş olduğunda o süreyi de aşıyor ve uygulamam çöküyor. Diğer işlemin bitmesini yani bir resim indikten sonra otomatik diğerine geçmesini nasıl sağlayabilirim. Kodlarım aşağıdaki gibidir.

     private void GetImages()
        {
          //btnIndir.Text = "İndiriliyor";
          //btnIndir.Enabled = false;
    
          try
          {
    
            foreach (var dlink in lbLinkler.Items)
            {
             
              links.Clear();
              WebClient web = new WebClient();
              string html = web.DownloadString(dlink.ToString());
    
              MatchCollection m1 = Regex.Matches(html, @"<img src=""\s*(.+?)\s*""", RegexOptions.Singleline);
              MatchCollection baslik = Regex.Matches(html, @"<h2>\s*(.+?)\s*</h2>", RegexOptions.Singleline);
    
              foreach (Match item in baslik)
              {
                baslikad = item.Groups[1].Value;
                break;
              }
    
              foreach (Match m in m1)
              {
    
                string link = m.Groups[1].Value;
                if (link.Contains("thumb_"))
                {
                  link = link.Replace("thumb_", string.Empty);
                  links.Add("http://website.com/gallery/" + link);
                }
    
              }
              baslikad = baslikad.Replace("/", "-");
              CreateResultFolder(ref baslikad);
    
              basliklar.Add(baslikad);
              while (!wc.IsBusy)
              {
                foreach (var item in links)
                {
                  string number = String.Format("{0:d9}", (DateTime.Now.Ticks / 10) % 1000000000);
                  Uri imageurl = new Uri(item);
                  wc.DownloadFileAsync(imageurl, path + "\\" + baslikad + "\\" + baslikad + "-" + number + "-" + sayi + ".jpg");
                  // MessageBox.Show(path + "\\" + baslikad + "\\" + baslikad + "-" + number + "-" + sayi + ".jpg");
    
                  sayi++;
                  if (chkYavas.Checked)
                  {
                    Thread.Sleep(35000);
                  }
                  else
                  {
                    Thread.Sleep(20000);
                  }
                  
    
                }
    
                break;
    
    
              }
    
    
            }
            MessageBox.Show(sayi - 1 + " tane resim indirildi");
          }
          catch (Exception ex)
          {
            MessageBox.Show("Hata oluştu." + ex.Message);
          }
          btnIndir.Text = "İndirmeye Başla";
          btnIndir.Enabled = true;
          sayi = 1;
        }


    • Düzenleyen selow 6 Nisan 2016 Çarşamba 18:26
    6 Nisan 2016 Çarşamba 18:26

Yanıtlar

Tüm Yanıtlar