第一次在WPF中使用进度条,界面是用的xml。运用BackgroundWorker实现进度条变化。
通过前台输入数据,在界面内画正方形。
代码如下:
1 private static BackgroundWorker backgroundWorker; 2 3 //窗体加载时进行的工作。 4 5 private void Window_Loaded(object sender, RoutedEventArgs e) 6 { 7 backgroundWorker = new BackgroundWorker(); 8 backgroundWorker.WorkerReportsProgress = true; 9 backgroundWorker.WorkerSupportsCancellation = true; //支持异步取消操作 10 backgroundWorker.DoWork += backgroundWorker_DoWork; //发生时BachgroundWorker.RunWorkerAsync()调用 11 backgroundWorker.ProgressChanged += backgroundWorker_ProgressChanged; 12 backgroundWorker.RunWorkerCompleted += backgroundWorkerDownloader_RunWorkerCompleted; 13 } 14 15 //后台操作任务,无法获取前台数据。不在一个线程 16 void backgroundWorker_DoWork(object sender, DoWorkEventArgs e) 17 { 18 for (int i = 0; i < ((int)e.Argument); i++) 19 { 20 backgroundWorker.ReportProgress(i); 21 22 //数据传输之间暂停的时间,10ms,数据传输过快而图形没有画完可能会造成进度条不显示 23 Thread.Sleep(10); 24 //(sender as BackgroundWorker).ReportProgress(i); 25 } 26 } 27 28 public static double lng = 110.00, lat = -35.00;//经度,纬度 29 double a = 0.01; 30 31 //需要前台数据的操作写在ProgressChanged中 32 33 void backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) 34 { 35 DrawNumber.Content = e.ProgressPercentage; 36 DrawProgressBar.Value = e.ProgressPercentage; 37 38 //在界面内画正方形 39 40 DrawZFX(e); 41 42 } 43 44 private void DrawZFX(ProgressChangedEventArgs e) 45 46 { 47 var i = e.ProgressPercentage; 48 lat = Math.Round((lat - a), 2); 49 TBLngValue.Text = (lng + a * i).ToString(); 50 TBLatValue.Text = (lat + a * i).ToString(); 51 AppendGeometryPoint(true); //在界面内添加起始点 52 53 TBLngValue.Text = ((lng + a * i) + a).ToString(); 54 TBLatValue.Text = (lat + a * i).ToString(); 55 AppendGeometryPoint(false); 56 57 TBLngValue.Text = ((lng + a * i) + a).ToString(); 58 TBLatValue.Text = ((lat + a * i) + a).ToString(); 59 AppendGeometryPoint(false); 60 61 TBLngValue.Text = (lng + a * i).ToString(); 62 TBLatValue.Text = ((lat + a * i) + a).ToString(); 63 AppendGeometryPoint(false); 64 } 65 66 void backgroundWorkerDownloader_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 67 { 68 DrawProgressBar.Visibility = Visibility.Hidden; 69 }