同时更新两个进度条

本文关键字:两个 更新 | 更新日期: 2023-09-27 18:26:46

我有来自ftp服务器的自动上传应用程序和两个进度条来更新整体和当前下载状态。第一个运行良好(更新%=currentFile为int/allFilesToDownload*100%)。但我想上传当前下载的文件。我的代码:

Uri url = new Uri(sUrlToDnldFile);
                    int inde = files.ToList().IndexOf(file);
                    string subPath = ...
                    bool IsExists = System.IO.Directory.Exists(subPath);
                    if (!IsExists)
                        System.IO.Directory.CreateDirectory(subPath);
                    sFileSavePath = ...
                    System.Net.FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(new Uri(file));
                    System.Net.FtpWebResponse response = (System.Net.FtpWebResponse)request.GetResponse();
                    response.Close();
                    long iSize = response.ContentLength;
                    long iRunningByteTotal = 0;
                    WebClient client = new WebClient();
                    Stream strRemote = client.OpenRead(url);
                    FileStream strLocal = new FileStream(sFileSavePath, FileMode.Create, FileAccess.Write, FileShare.None);
                    int iByteSize = 0;
                    byte[] byteBuffer = new byte[1024];
                    while ((iByteSize = strRemote.Read(byteBuffer, 0, byteBuffer.Length)) > 0)
                    {
                        strLocal.Write(byteBuffer, 0, iByteSize);
                        iRunningByteTotal += iByteSize;
//THERE I'D LIKE TO UPLOAD CURRENT FILE DOWNLOAD STATUS
                        string a = iByteSize.ToString();
                        double b = double.Parse(a.ToString()) / 100;
                        string[] c = b.ToString().Split(',');
                        int d = int.Parse(c[0].ToString());
                        update(d);
//update(int prog) {  bgWorker2.ReportProgress(prog); }

                    }
                    double dIndex = (double)(iRunningByteTotal);
                    double dTotal = (double)iSize;
// THIS CODE COUNTING OVERAL PROGRESS - WORKS FINE
                    double iProgressPercentage1 = double.Parse(ind.ToString()) / double.Parse(files.Count().ToString()) * 100;
                    ind++;
                    string[] tab = iProgressPercentage1.ToString().Split(',');
                    int iProgressPercentage = int.Parse(tab[0]);
                    currentFile = file;
                    bgWorker1.ReportProgress(iProgressPercentage);
                    strRemote.Close();

不幸的是,我仍然收到错误,我无法更新progressBar2,因为另一个进程正在使用它。有什么办法吗?感谢

同时更新两个进度条

通过调度器更新值。BeginInvoke方法类似。

Dispatcher.BeginInvoke(DispatcherPriority.Background, new Action(()=>
{
  progressbar2.value = newvalue;
}));

这个Dispatcher将把您的工作推送到保存Progressbar2的主线程。