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;