WPF C# - 从另一个线程更新进度条

作者:编程家 分类: swift 时间:2025-05-09

使用WPF C# - 从另一个线程更新进度条

在WPF应用程序中,经常需要在长时间运行的任务期间显示进度条,以向用户展示任务的完成进度。然而,由于WPF的UI线程与后台线程是独立的,直接在后台线程中更新UI元素是不被允许的。在本文中,我们将介绍如何在WPF应用程序中从另一个线程更新进度条。

在后台线程中更新UI进度条

在WPF中,UI元素是由UI线程负责更新的。当我们在后台线程中更新UI元素时,需要使用Dispatcher对象来调度更新操作到UI线程。

首先,我们需要在XAML中定义一个进度条控件,如下所示:

然后,在后台线程中更新进度条的代码如下所示:

private void UpdateProgressBar(int progress)

{

Application.Current.Dispatcher.Invoke(() =>

{

progressBar.Value = progress;

});

}

在这个例子中,我们在后台线程中调用了`UpdateProgressBar`方法来更新进度条的值。通过调用`Application.Current.Dispatcher.Invoke`方法,我们将更新操作发送到UI线程中,以避免线程冲突。

案例代码

以下是一个完整的示例代码,演示了如何在WPF应用程序中从另一个线程更新进度条:

csharp

using System.Threading;

using System.Windows;

namespace WpfProgressBarUpdate

{

public partial class MainWindow : Window

{

public MainWindow()

{

InitializeComponent();

}

private void StartButton_Click(object sender, RoutedEventArgs e)

{

Thread thread = new Thread(UpdateProgress);

thread.Start();

}

private void UpdateProgress()

{

for (int i = 0; i <= 100; i++)

{

UpdateProgressBar(i);

Thread.Sleep(100);

}

}

private void UpdateProgressBar(int progress)

{

Application.Current.Dispatcher.Invoke(() =>

{

progressBar.Value = progress;

});

}

}

}

在这个例子中,当点击"Start"按钮时,启动了一个后台线程来模拟长时间运行的任务。在每次循环中,我们通过调用`UpdateProgressBar`方法来更新进度条的值,并使用`Thread.Sleep`方法模拟任务的延迟。

在本文中,我们学习了如何在WPF应用程序中从另一个线程更新进度条。通过使用Dispatcher对象将UI更新操作调度到UI线程中,我们可以避免线程冲突并正确地更新进度条的值。这种技术对于任何需要显示长时间运行任务的进度的WPF应用程序都非常有用。