şuan deneme şansım yok, kafadan yazıyorum.. mantığını anlarsan çözersin eğer bir sıkıntı olursa
WebClient client;
//formun ismini Form1 olarak varsayıyorum..
public Form1()
{
InitializeComponent();
client = new WebClient();
client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged);
client.DownloadFileCompleted += new AsyncCompletedEventHandler(client_DownloadFileCompleted);
}
private void btnStartDownload_Click(object sender, EventArgs e)
{
var link1 = new PrivateLink("indirilecek dosya linki 1 ", "kaydedileceği konum ve dosyadı 1" );
var link2 = new PrivateLink("indirilecek dosya linki 2 ", "kaydedileceği konum ve dosyadı 2");
ThreadPool.QueueUserWorkItem(new WaitCallback(download), link1);
ThreadPool.QueueUserWorkItem(new WaitCallback(download), link2);
btnStartDownload.Text = "Download In Process";
btnStartDownload.Enabled = false;
}
void download(object fileInfo)
{
PrivateLink link = fileInfo as PrivateLink;
// Starts the download
client.DownloadFileAsync(new Uri(link.fileUrl),link.locationPath);
}
ayrı bir sınıf yap
public class PrivateLink()
{
public void PrivateLink(string fileUrl, string locationPath)
{
this.fileUrl = fileUrl;
this.locationPath = locationPath;
}
public string fileUrl {get;set;}
public string locationPath {get;set;}
}
kalan şeylerde yazdığın kodları kullan.. bu şekilde çalışması gerekiyor.. ne yaptığıma gelince, her download işini havuzdaki bir iş parçacağına (thread) e yükledim..
download fonksiyonu içinde client da thread çakışabilir, bunun için bir delegate ya da action kullanmak gerekebilir ya da lock kullanacaksın.. bi dene de bakarız ona uygun çözüm..
kolay gelsin