从类中下载更新表单中的进度条

本文关键字:更新 下载 表单 | 更新日期: 2023-09-27 17:58:19

我知道这里有很多问题,但我已经解决了很多问题,运气不好。我是活动和后台工作人员的新手,我只是不知道实现这一点的最佳方法。

我有一个基本的C#Windows窗体。它包含一个进度条。我正在调用一个要下载文件的类。我希望进度条在下载的基础上更新。如果所有东西都在同一个班上,我可以让它正常工作,但在这种情况下我无法让它工作。处理这个问题的最佳方法是什么?我该如何处理?目前我正在做这个:

WebClient downloader = new WebClient();             
downloader.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
downloader.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);

然后为了改变进展,我这样做:

public void ProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
    pbDownload.Value = e.ProgressPercentage;
}

但当我把除了进度条之外的所有这些都放在一个单独的课堂上时,一切都变得一团糟。想法?谢谢

从类中下载更新表单中的进度条

我有这个女巫,它和你想做的差不多,而且效果很好F状态。。。表单参考

 FrmStatus FStatus = null;
        public void ProgressInit(String caption, string opis, int Max)
        {
            FStatus = new SZOKZZ.FrmStatus();
            FStatus.InitProc(Max);
            FStatus.SetCaption(caption, opis);
            FStatus.Show();
        }
        public void DLProgress(string curl, string cdl)
        {
            WebClient webClient = new WebClient();
            webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(DLDone);
            webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(DLSetProc);
            webClient.DownloadFileAsync(new Uri(curl), cdl);
        }
        private void DLSetProc(object sender, DownloadProgressChangedEventArgs e)
        {
            this._FileProcentDownloaded = e.ProgressPercentage;
            FStatus.SetProcDL(this._FileProcentDownloaded);
        }
        private void DLDone(object sender, AsyncCompletedEventArgs e)
        {
            _DlError = e.Error;
            FStatus.Dispose();
            FStatus = null;
        }

您应该调用Application.DoEvents();强制表单根据控件的新值更新控件:

   public void ProgressChanged(object sender, DownloadProgressChangedEventArgs e)
        {
            pbDownload.Value = e.ProgressPercentage;
            Application.DoEvents();
        }

问候