如何在WinForms中制作文件下载进度条?

如何在WinForms中制作文件下载进度条?,winforms,download,progress-bar,Winforms,Download,Progress Bar,我正在用CefSharp做一个网络浏览器。我两天前刚刚实现了下载,但下载时没有进度条。如何使进度条显示下载进度?编辑:使事情更清楚 将ProgressBar控件添加到表单中,并在其旁边添加BackgroundWorker组件到表单中。首先计算您的文件大小: Int64 bytes_total= Convert.ToInt64(client.ResponseHeaders["Content-Length"]) 这是Alex惊人答案中的代码,可在此处找到: public Form1() {

我正在用CefSharp做一个网络浏览器。我两天前刚刚实现了下载,但下载时没有进度条。如何使进度条显示下载进度?

编辑:使事情更清楚

将ProgressBar控件添加到表单中,并在其旁边添加BackgroundWorker组件到表单中。首先计算您的文件大小:

Int64 bytes_total= Convert.ToInt64(client.ResponseHeaders["Content-Length"])
这是Alex惊人答案中的代码,可在此处找到:

public Form1()
{
    InitializeComponent();

    backgroundWorker1.DoWork += backgroundWorker1_DoWork;
    backgroundWorker1.ProgressChanged += backgroundWorker1_ProgressChanged;
    backgroundWorker1.WorkerReportsProgress = true;
}

private void button1_Click(object sender, EventArgs e)
{
    backgroundWorker1.RunWorkerAsync();
}

private void backgroundWorker1_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
{
    //Replace this code with a way to figure out how much of the file you have already downloaded and then use backgroundworker1.ReportProgress and send the percentage completion of the file download.
    for (int i = 0; i < 100; i++)
    {
        Thread.Sleep(1000);
        backgroundWorker1.ReportProgress(i);
    }
}

private void backgroundWorker1_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e)
{
    progressBar1.Value = e.ProgressPercentage;
}
public Form1()
{
初始化组件();
backgroundWorker1.DoWork+=backgroundWorker1_DoWork;
backgroundWorker1.ProgressChanged+=backgroundWorker1\u ProgressChanged;
backgroundWorker1.WorkerReportsProgress=true;
}
私有无效按钮1\u单击(对象发送者,事件参数e)
{
backgroundWorker1.RunWorkerAsync();
}
私有void backgroundWorker1\u DoWork(对象发送方,System.ComponentModel.DoWorkEventArgs e)
{
//将此代码替换为一种计算您已经下载了多少文件的方法,然后使用backgroundworker1.ReportProgress并发送文件下载完成百分比。
对于(int i=0;i<100;i++)
{
睡眠(1000);
背景工作1.报告进度(一);
}
}
private void backgroundWorker1\u ProgressChanged(对象发送方,System.ComponentModel.ProgressChangedEventArgs e)
{
progressBar1.值=e.ProgressPercentage;
}

可能重复:我使用的是winform而不是XAML。您可以更改类似于此解决方案的代码。使用winforms和invoke的处理程序和进度条,当我将其放入时,会出现错误,如“名称”Thread“在当前上下文中不存在”和“名称”BackgroundWorker1\u ProgressChanged“在当前上下文中不存在”,当我放入Int64字节时,也会出现错误\u total=Convert.ToInt64(client.ResponseHeaders[“Content Length”])我得到一个错误,说客户端在当前上下文中不存在编辑您的问题并添加更多细节,否则缺少细节是荒谬的。