using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace ProgressBarSample { /// /// Interaction logic for MainWindow.xaml /// public partial class MainWindow : Window { private BackgroundWorker _worker; public MainWindow() { InitializeComponent(); InitInstance(); } private void InitInstance() { _worker = new BackgroundWorker(); _worker.WorkerReportsProgress = true; _worker.DoWork -= OnWorker_DoWork; _worker.ProgressChanged -= OnWorker_ProgressChanged; _worker.RunWorkerCompleted -= OnWorker_RunWorkerCompleted; _worker.DoWork += OnWorker_DoWork; _worker.ProgressChanged += OnWorker_ProgressChanged; _worker.RunWorkerCompleted += OnWorker_RunWorkerCompleted; } private void btnStart_Click(object sender, RoutedEventArgs e) { if (_worker.IsBusy) return; _worker.RunWorkerAsync(); } private void OnWorker_RunWorkerCompleted(object? sender, RunWorkerCompletedEventArgs e) { pgbMain.Value = pgbMain.Maximum; } private void OnWorker_ProgressChanged(object? sender, ProgressChangedEventArgs e) { pgbMain.Value = (double)e.ProgressPercentage / 10.0; } private void OnWorker_DoWork(object? sender, DoWorkEventArgs e) { for (int i = 0; i < 1000; i++) { _worker.ReportProgress(i); Thread.Sleep(10); } } } }