我在调试时BackgroundWorker1_ProgressChanged事件没有被执行,哪位高手能帮忙解答下,万分感谢!! private void button4_Click(object sender, EventArgs e) //手动下载数据
{
backgroundWorker1.RunWorkerAsync(label1);
backgroundWorker1.WorkerReportsProgress = true; }
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{ BackgroundWorker work=new BackgroundWorker();
work.WorkerReportsProgress = true;
downloadxml.downloadfile((Label)e.Argument,work,e);
} private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
} private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
label1.Text = "下载完成!";
}
downloadfile代码:
int l = filenames.Length;
int per = 0; for (int j = 0; j < filenames.Length; j++)
{
if (File.Exists(@"E:\ftptb\" + filenames[j].ToString()) == false)
{
string extend = filenames[j].Substring(filenames[j].LastIndexOf(".")); //获取扩展名
if (extend == ".XML")
{
ftp.OpenDownload(filenames[j].ToString(), @"E:\ftptb\" + filenames[j].ToString(), true);
while (ftp.DoDownload() > 0)
{
//读取数据,直到数据剩余0kb
} per=(j * 100) / l;
work.ReportProgress(per);
} } else
{
per=(j * 100) / l;
work.ReportProgress(per);
}
{
backgroundWorker1.RunWorkerAsync(label1);
backgroundWorker1.WorkerReportsProgress = true; }
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{ BackgroundWorker work=new BackgroundWorker();
work.WorkerReportsProgress = true;
downloadxml.downloadfile((Label)e.Argument,work,e);
} private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
} private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
label1.Text = "下载完成!";
}
downloadfile代码:
int l = filenames.Length;
int per = 0; for (int j = 0; j < filenames.Length; j++)
{
if (File.Exists(@"E:\ftptb\" + filenames[j].ToString()) == false)
{
string extend = filenames[j].Substring(filenames[j].LastIndexOf(".")); //获取扩展名
if (extend == ".XML")
{
ftp.OpenDownload(filenames[j].ToString(), @"E:\ftptb\" + filenames[j].ToString(), true);
while (ftp.DoDownload() > 0)
{
//读取数据,直到数据剩余0kb
} per=(j * 100) / l;
work.ReportProgress(per);
} } else
{
per=(j * 100) / l;
work.ReportProgress(per);
}
private void InitializeBackgoundWorker()
{
backgroundWorker1.DoWork +=
new DoWorkEventHandler(backgroundWorker1_DoWork);
backgroundWorker1.RunWorkerCompleted +=
new RunWorkerCompletedEventHandler(
backgroundWorker1_RunWorkerCompleted);
backgroundWorker1.ProgressChanged +=
new ProgressChangedEventHandler(
backgroundWorker1_ProgressChanged);
}但还是没被执行,我已经很仔细看了,还是没发现问题出在哪?哪位能帮帮我啊
一个简单的刷网页流量的小工具代码1. 从工具栏拖一个BackgroundWorker控件,设置其属性WorkerReportsProgress为true2. 要让worker开始工作,执行如下代码:
mBackgroundWorker.RunWorkerAsync(arg);
这里有重写,如果不需要传递参数直接mBackgroundWorker.RunWorkerAsync();3. 编辑DoWork事件代码:
e.Argument为mBackgroundWorker.RunWorkerAsync(arg);对应的参数
之所以使用进度条,肯定是有循环的,在循环中报告进度:
worker.ReportProgress(i * 100 / totalNum, obj );
其中第一个参数是当前进度的百分之多少,obj为你要传递的UserState,如果没有可以不要4. 编辑ProgressChanged事件代码:
e.ProgressPercentage为进度的百分数,e.UserState为刚才传递过来的object
在这个事件中可以调用ui的进度条和其他控件:
mToolStripProgressBar.Value = e.ProgressPercentage;5. 编辑RunWorkerCompleted事件代码:
工作完成了告诉uiusing System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Threading;namespace WindowsApplication15
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}private void button1_Click(object sender, EventArgs e)
{
//textBox1.Text里面储存URL
backgroundWorker1.RunWorkerAsync(textBox1.Text);
}private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker bw = (BackgroundWorker)sender;
string url = e.Argument.ToString();for (int i = 0; i < 10; i++)
{
//没有取消后台操作
if (!bw.CancellationPending)
{
WebRequest req = WebRequest.Create(url);
WebResponse resp = req.GetResponse();
resp.Close();Thread.Sleep(1000);
bw.ReportProgress(i * 100 / 10, i);
}
}
}private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
label1.Text = e.UserState.ToString();
}private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
MessageBox.Show("ok!");
}
}
}======================