WPF ProgressBar - make the progress bar completed after the operation finished
我有一个WPF表单,该表单运行带有进度条的后台操作。但问题是;
操作完成后,进度条仍在运行。我的意思是,它表明操作正在进行中。
我该如何阻止呢?这是我的全部代码;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | System.ComponentModel.BackgroundWorker mWorker; private void button1_Click(object sender, RoutedEventArgs e) { mWorker = new System.ComponentModel.BackgroundWorker(); mWorker.DoWork +=new System.ComponentModel.DoWorkEventHandler(worker_DoWork); mWorker.ProgressChanged +=new System.ComponentModel.ProgressChangedEventHandler(worker_ProgressChanged); mWorker.WorkerReportsProgress = true; mWorker.WorkerSupportsCancellation = true; mWorker.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(worker_RunWorkerCompleted); mWorker.RunWorkerAsync(); while (pbProcessing.Value != 100) { if (!mWorker.CancellationPending) { try { pbProcessing.Value = (pbProcessing.Value + 0.01) % 100; } catch (System.Exception ex) { // No action required } } else { MessageBox.Show(this,"Process cancelled","Cancel Process", MessageBoxButton.OK); break; } System.Windows.Threading.Dispatcher.CurrentDispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Background, new System.Threading.ThreadStart(delegate { })); } } private void worker_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e) { // Do your work here, its on seperate thread System.Threading.Thread.Sleep(10000); } private void worker_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e) { pbProcessing.Value = e.ProgressPercentage; } private void worker_RunWorkerCompleted(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e) { // Stop Progressbar updatation Window1 w = new Window1(); w.Browser.Navigate(new Uri("http://stackoverflow.com")); w.Show(); } private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) { if (mWorker != null) { if (mWorker.IsBusy) { mWorker.CancelAsync(); } } } |
如果要在完成工作后隐藏进度条,请将其
请注意,您的代码实际上没有任何意义:而不是在按钮事件处理程序中连续更改
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | System.ComponentModel.BackgroundWorker mWorker; private void button1_Click(object sender, RoutedEventArgs e) { mWorker = new System.ComponentModel.BackgroundWorker(); mWorker.DoWork +=new System.ComponentModel.DoWorkEventHandler(worker_DoWork); mWorker.ProgressChanged +=new System.ComponentModel.ProgressChangedEventHandler(worker_ProgressChanged); mWorker.WorkerReportsProgress = true; mWorker.WorkerSupportsCancellation = true; mWorker.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(worker_RunWorkerCompleted); mWorker.RunWorkerAsync(); // Don't do anything else here } private void worker_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e) { for (int i = 1; i < 100; i++) { mWorker.ReportProgress(i); // Do some part of the work System.Threading.Thread.Sleep(100); // Check if the user wants to abort if (mWorker.CancellationPending) { e.Cancel = true; return; } } mWorker.ReportProgress(100); // Done } private void worker_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e) { pbProcessing.Value = e.ProgressPercentage; } private void worker_RunWorkerCompleted(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e) { // Stop Progressbar updatation Window1 w = new Window1(); w.Browser.Navigate(new Uri("http://stackoverflow.com")); w.Show(); // Check the result if (e.Cancelled) { // show the message box that the task has been canceled } // Reset Progress bar pbProcessing.Value = 0; } private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) { if (mWorker != null) { if (mWorker.IsBusy) { mWorker.CancelAsync(); } } } |