В ранних примерах по работе с ProgressBar в WPF рекомендовалось использовать BackgroundWorker.
Вот здесь достаточно простой и понятный пример с использованием ProgressBar и BackgroundWorker. Однако он довольно сильно устарел и в настоящее время BackgroundWorker для этих целей не используется. Вместо него можно использовать Progress и Task.
Пример
MainWindow.xaml
<Window x:Class="ReportProgressDemo.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:ReportProgressDemo"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
<Button Height="65" Width="150" Margin="15" Click="Button_Click">Loop through numbers</Button>
<ProgressBar x:Name="_progressBar" Height="25" Width="300" Margin="15"></ProgressBar>
<TextBlock x:Name="_textBlock" Text="Start" FontSize="48" Margin="15" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</StackPanel>
</Window>
MainWindow.xaml.cs
using System.Windows;
namespace ReportProgressDemo
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private async void Button_Click(object sender, RoutedEventArgs e)
{
var progress = new Progress<int>(value =>
{
_progressBar.Value = value;
_textBlock.Text = $"{value}%";
});
await Task.Run(() => LoopThroughNumbers(100, progress));
_textBlock.Text = "Completed";
}
private void LoopThroughNumbers(int count, IProgress<int> progress)
{
for (int x = 0; x < count; x++)
{
Thread.Sleep(100);
var percentComplete = (x * 100) / count;
progress.Report(percentComplete);
}
}
}
}
На заметку — в этом видео добавлена поддержка отмены задачи:
DenTNT недавно публиковал (посмотреть все)
- WPF: Отображение прогресса с помощью async/await - 13.02.2025
- Firefox: Вернуть кнопки на место - 10.02.2025
- VK: Реклама в ленте Feed - 27.01.2025