BackgroundWorker在完成后不再启动

时间:2016-02-16 14:16:48

标签: c# winforms backgroundworker windows-10

我有一个WinForms应用程序,它使用后台工作程序从给定的URL下载图像。为了下载,我使用了一个后台工作者。 启动时应用程序运行正常,下载按计划进行,但是当工作人员完成并再次单击下载按钮以开始从另一个URL下载时,后台工作人员不会执行任何操作。

我在工作完成时调用application.restart()暂时解决了这个问题,但是工作时间不长,但是不能超过它。

工人码:

// initialization of worker is done in constructor of my class
downloadWorker.WorkerReportsProgress = true;
downloadWorker.WorkerSupportsCancellation = true;

downloadWorker.DoWork += new DoWorkEventHandler(worker_doWork);
downloadWorker.ProgressChanged += new ProgressChangedEventHandler(worker_progressChanged);
downloadWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_runWorkerCompleted);
// ...
private void worker_doWork(object sender, DoWorkEventArgs e)
{
    WebClient downloadClient = new WebClient();   
    HttpWebRequest HttpReq = (HttpWebRequest)WebRequest.Create(url);

    HttpWebResponse response;
    try
    {
        response = (HttpWebResponse)HttpReq.GetResponse();
    }
    catch (WebException ex)
    {
        response = (HttpWebResponse)ex.Response;
    }

    if (response.StatusCode == HttpStatusCode.NotFound)
                    MessageBox.Show("Website not found");
    if (response.StatusCode == HttpStatusCode.OK)
    {
        for(int i=0; i<3;i++)
        {
            string image = getImageUrl(url,i);
            downloadWorker.ReportProgress(i);
            image = WebUtility.HtmlDecode(image);
            string saveName = "img_"+i+".png";
            try
            {
                downloadClient.DownloadFile(image, saveName);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.StackTrace);
            }

        }
    }
}
private void worker_progressChanged(object sender, ProgressChangedEventArgs e)
{
    rtxtStatus.AppendText("Downloade Image" + e.ProgressPercentage + " of 3");
}
private void worker_runWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    MessageBox.Show("Download completed");
}

编辑:

if (e.Error != null)
{
    MessageBox.Show(e.Error.ToString());
}

为了避免任何误解:backgroundWorker在第二次定义运行,并且它不是reportProgress方法的错误,因为当我不报告任何内容时我得到相同的东西。

编辑没有。 2:

我发现错误来自哪里:在第二次运行时,完全跳过for循环。但这对我来说也没有任何意义......因为我有一个全新的类实例,所以还没有任何其他价值,是吗?但无论如何,如果它只是跳过了方法,那么工人仍然应该退出它不做的事情。为了测试,我在for循环之后添加了一个MessageBox,它在第二次运行后没有执行。

0 个答案:

没有答案