public partial class MainWindow : Window, INotifyPropertyChanged { private readonly BackgroundWorker worker = new BackgroundWorker(); public MainWindow() { InitializeComponent(); worker.WorkerReportsProgress = true; worker.WorkerSupportsCancellation = true; worker.DoWork += myWorker_DoWork; worker.RunWorkerCompleted += myWorker_RunWorkerCompleted; DataContext = this; } private int num = 10; public int Num { get { return num; } set { num = value; OnPropertyChanged("Num"); } } void myWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { } void myWorker_DoWork(object sender, DoWorkEventArgs e) { for (int i = 0; i < 6; i++) { System.Threading.Thread.Sleep(1000); worker.ReportProgress(i * 10); Num++; } } private void btn1_Click(object sender, RoutedEventArgs e) { worker.RunWorkerAsync(); } private void dispatcherTimer_Tick(object sender, EventArgs e) { Num--; lb1.Items.Add(Num); CommandManager.InvalidateRequerySuggested(); lb1.Items.MoveCurrentToLast(); lb1.SelectedItem = lb1.Items.CurrentItem; lb1.ScrollIntoView(lb1.Items.CurrentItem); } private void btn_Click(object sender, RoutedEventArgs e) { System.Windows.Threading.DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer(); dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick); dispatcherTimer.Interval = new TimeSpan(0, 0, 1); dispatcherTimer.Start(); } public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged([System.Runtime.CompilerServices.CallerMemberName] string name = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name)); } }