首页 > 技术文章 > WPF中ProgressBar的使用

zhen-dong623 2018-03-30 15:51 原文

第一次在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  }

 

推荐阅读