参考自:
https://blog.csdn.net/zhumingyan/article/details/50294905
后台代码:
BackgroundWorker bgMeet; private void button1_Click(object sender, RoutedEventArgs e) { bgMeet = new BackgroundWorker(); //能否报告进度更新 bgMeet.WorkerReportsProgress = true; //要执行的后台任务 bgMeet.DoWork += new DoWorkEventHandler(bgMeet_DoWork); //进度报告方法 bgMeet.ProgressChanged += new ProgressChangedEventHandler(bgMeet_ProgressChanged); //后台任务执行完成时调用的方法 bgMeet.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgMeet_RunWorkerCompleted); bgMeet.RunWorkerAsync(); //任务启动 } //执行任务 void bgMeet_DoWork(object sender, DoWorkEventArgs e) { //开始播放等待动画 this.Dispatcher.Invoke(new Action(() => { loading.Visibility = System.Windows.Visibility.Visible; })); //开始后台任务 GetData(); } //报告任务进度 void bgMeet_ProgressChanged(object sender, ProgressChangedEventArgs e) { this.Dispatcher.Invoke(new Action(() => { this.lab_pro.Content = e.ProgressPercentage + "%"; })); } //任务执行完成后更新状态 void bgMeet_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { loading.Visibility = System.Windows.Visibility.Collapsed; this.Dispatcher.Invoke(new Action(() => { this.lab_pro.Content = "完成"; })); } //模拟耗时任务 public void GetData() { for (int i = 0; i < 6; i++) { bgMeet.ReportProgress(20 * i); System.Threading.Thread.Sleep(400); } }