none
BackgroundWorker中的ProgressBar显示问题 RRS feed

  • 问题

  • 我在用BackgroundWorker类写一个上传视频的功能,现在可以正常上传,如何才能获取到上传的进度绑定到ProgressBar上呢?

    部分代码:

      private void UploadVideo(object sender, RoutedEventArgs e)
            {
                bw.DoWork += bw_DoWork;
                bw.ProgressChanged += bw_ProgressChanged;
                bw.RunWorkerCompleted += bw_RunWorkerCompleted;
                bw.RunWorkerAsync();
            }
    
     void bw_DoWork(object sender, DoWorkEventArgs e)
            {
                upload();//上传功能
            }
    
            void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
            {
                Progress.Visibility = Visibility.Collapsed;//上传完成进度条隐藏
            }
    
            void bw_ProgressChanged(object sender, ProgressChangedEventArgs e)
            {
                Progress.Visibility = Visibility.Visible;
                this.Progress.Value = e.ProgressPercentage;  //这里无效,是不是这里还需要设置什么?
            }

    2014年8月5日 6:48

答案

  • 你好。

    首先需要对BackgroundWorker进行设置:bw.WorkerReportsProgress = true; 

    然后在bw_DoWork 方法中,需要手动调用ReportProgress 方法,可以是定时调用,也可以是根据上传进度调用。

    调用后,ProgressChanged事件才会被触发。

    详细代码见这个例子:How to: Use a Background Worker



    希望我的答案能帮助更多的人。

    2014年8月5日 7:00

全部回复

  • 你好。

    首先需要对BackgroundWorker进行设置:bw.WorkerReportsProgress = true; 

    然后在bw_DoWork 方法中,需要手动调用ReportProgress 方法,可以是定时调用,也可以是根据上传进度调用。

    调用后,ProgressChanged事件才会被触发。

    详细代码见这个例子:How to: Use a Background Worker



    希望我的答案能帮助更多的人。

    2014年8月5日 7:00
  • 你好。

    首先需要对BackgroundWorker进行设置:bw.WorkerReportsProgress = true; 

    然后在bw_DoWork 方法中,需要手动调用ReportProgress 方法,可以是定时调用,也可以是根据上传进度调用。

    调用后,ProgressChanged事件才会被触发。




    希望我的答案能帮助更多的人。

    bw.WorkerReportsProgress = true; 这个我在工程里写了,我是想根据上传进度调用的,这是不是说我要从服务器上取得一些它返回来的值去写这个ReportProgress?关键是我如何能取得这个返回的值呢?(因为我看demo是自己写的一个循环)
    2014年8月5日 9:21
  • 一般上传时都会对文件进行分块,你可以在每个块上传成功后,触发改变进度的事件。

    如果你是一次性上传完毕的,建议你按照时间来显示进度吧,比如说每秒钟或者每几秒钟触发一次,都是可以的。


    希望我的答案能帮助更多的人。

    2014年8月5日 9:31