从类中下载更新表单中的进度条
本文关键字:更新 下载 表单 | 更新日期: 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();
}
问候