同时更新两个进度条

时间:2013-08-07 11:14:47

标签: c# wpf progress-bar backgroundworker

我有来自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,因为使用它的另一个进程。 有什么办法吗? 感谢

1 个答案:

答案 0 :(得分:1)

通过dispatcher.BeginInvoke更新值类似的方法。

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

这个Dispatcher会让你工作到持有Progressbar2的主线程。