BackgroundWorker 不工作
BackgroundWorker doesn't work
所以这是代码:
void scrape()
{
int i = 1;
......
backgroundWorker1.ReportProgress(i);
i = i+1;
}
void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
}
void BackgroundWorker1DoWork(object sender, DoWorkEventArgs e)
{
scrape();
}
void Button1Click(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
}
问题是如果我点击 botton1 没有任何反应,如果我只是在 button1onclick 上使用 scrape() 它工作得很好。为什么后台工作人员不执行抓取并使进度条起作用?
谢谢!
在您的 scrape()
方法中,您如何使用变量 i
?要使其工作 i
应该通过循环递增,如下所示:
void scrape()
{
for (int i = 1; i <= 100; i++)
{
backgroundWorker1.ReportProgress(i);
}
}
我可以确认上面的代码对我有用。然后不要忘记连接所需的事件和属性:
backgroundWorker1.WorkerReportsProgress = true; //Report a progress
backgroundWorker1.ProgressChanged += backgroundWorker1_ProgressChanged;
backgroundWorker1.DoWork += BackgroundWorker1DoWork; //The scrape
定义这个:
void BackgroundWorker1DoWork(object sender, DoWorkEventArgs e)
{
scrape();
}
在程序的初始化/构造函数中,您需要添加这些行以使其工作
BackgroundWorker1.DoWork += new BackgroundWorkerDoWorkEventHandler(BackgroundWorker1DoWork)
代码的其他部分也是如此
BackgroundWorker1.ProgressChanged += new ProgressChangedEventHandler (backgroundWorker1_ProgressChanged);
BackgroundWorker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker1_RunWorkerCompleted);
BackgroundWorker1.WorkerReportsProgress = true;
BackgroundWorker1.WorkerSupportsCancellation = true;
所以这是代码:
void scrape()
{
int i = 1;
......
backgroundWorker1.ReportProgress(i);
i = i+1;
}
void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
}
void BackgroundWorker1DoWork(object sender, DoWorkEventArgs e)
{
scrape();
}
void Button1Click(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
}
问题是如果我点击 botton1 没有任何反应,如果我只是在 button1onclick 上使用 scrape() 它工作得很好。为什么后台工作人员不执行抓取并使进度条起作用?
谢谢!
在您的 scrape()
方法中,您如何使用变量 i
?要使其工作 i
应该通过循环递增,如下所示:
void scrape()
{
for (int i = 1; i <= 100; i++)
{
backgroundWorker1.ReportProgress(i);
}
}
我可以确认上面的代码对我有用。然后不要忘记连接所需的事件和属性:
backgroundWorker1.WorkerReportsProgress = true; //Report a progress
backgroundWorker1.ProgressChanged += backgroundWorker1_ProgressChanged;
backgroundWorker1.DoWork += BackgroundWorker1DoWork; //The scrape
定义这个:
void BackgroundWorker1DoWork(object sender, DoWorkEventArgs e)
{
scrape();
}
在程序的初始化/构造函数中,您需要添加这些行以使其工作
BackgroundWorker1.DoWork += new BackgroundWorkerDoWorkEventHandler(BackgroundWorker1DoWork)
代码的其他部分也是如此
BackgroundWorker1.ProgressChanged += new ProgressChangedEventHandler (backgroundWorker1_ProgressChanged);
BackgroundWorker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker1_RunWorkerCompleted);
BackgroundWorker1.WorkerReportsProgress = true;
BackgroundWorker1.WorkerSupportsCancellation = true;