دانلود فایل در سی شارپ و مشاهده وضعیت پیشرفت در Progressbar

این پست توسط دوست عزیزمون آقای شهریاری (shahryarifar.ali@gmail.com) ارسال شده.
برای دانلود کردن فایل در سی شارپ ، ابتدا میبایست مراحل زیر را طی کنید
برای طراحی فرم ، دو عدد TextBox  ، دوعدد Lable ، یک عدد دکمه و یک کنترل Progressbar همانند شکل زیر ، اضافه کنید.

download-file-csharp-and-view-progress-01

در قسمت Toolbox راست کلیک و سپس گزینه Choose Items را بزنید تا وارد محیط زیر شود این کار برای اولین بار ممکن است بعلت بارگذاری کتابخانه ها کمی طول بکشد

download-file-csharp-and-view-progress-02

در قسمت بالا تیک WebClient  را فعال کنید و سپس روی دکمه Ok کلیک کنید
با اینکار آبجکت WebClient در لیست ابزارها قابل مشاهده است و انرا روی فرمتان درگ کنید تا در نوار ابزار پایین قابل مشاهده باشد

download-file-csharp-and-view-progress-03

کدهای دکمه دانلود:

 
private void button1_Click(object sender, EventArgs e)
{
   progressBar1.Value = 0;
   Uri u =new Uri(textBox1.Text );
   webClient1.DownloadFileAsync(u, textBox2.Text);
}

در لیست رویدادهای ابجکت Webclient ، رویداد های DownloadFileCompleted  و DownloadProgressChanged را با دابل کلیک کردن همانند شکل زیر ، به برنامه اضافه کنید

download-file-csharp-and-view-progress-04

در رویدادهای ایجاد شده کدهای زیز را بنویسید:

private void webClient1_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
{
    progressBar1.Value = 100;
    MessageBox.Show("دانلود با موفقیت انجام شد");
}

private void webClient1_DownloadProgressChanged(object sender, System.Net.DownloadProgressChangedEventArgs e)
{
    progressBar1.Value = e.ProgressPercentage;
}

دوستان شما با استفاده از کدهای فوق میتوانید به راحتی یک کلاس بسازید و درصورت نیاز تبدیل به دی ال ال کنید

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;


public class Download
{
    private System.Net.WebClient w;
    private ProgressBar prog;
    public Download()
    {
        w = new System.Net.WebClient();
        w.DownloadFileCompleted += new System.ComponentModel.AsyncCompletedEventHandler(w_DownloadFileCompleted);
        w.DownloadProgressChanged += new System.Net.DownloadProgressChangedEventHandler(w_DownloadProgressChanged);
    }
    public void download(string url, string filePath, ProgressBar progress)
    {
        prog = progress;
        prog.Value = 0;
        Uri u = new Uri(url);
        w.DownloadFileAsync(u, filePath);
    }

    void w_DownloadProgressChanged(object sender, System.Net.DownloadProgressChangedEventArgs e)
    {
        prog.Value = e.ProgressPercentage;
    }

    void w_DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
    {
        prog.Value = 100;
        MessageBox.Show("دانلود با موفقیت انجام شد");
    }
}

نحوه استفاده از کلاس فوق در برنامه

private void button1_Click(object sender, EventArgs e)
{
	Download dw = new Download();
	dw.download(textBox1.Text, textBox2.Text, progressBar1);
}

لینک دانلود پروژه