首页 > 解决方案 > 如何在不阻塞线程的情况下更新 WPF 中的文本和进度条?

问题描述

我的窗口中有一个进度条。

所以在我的“Do”方法中,我想在不阻塞 UI 的情况下更改状态文本和进度条:

public void Do()
{
   ProgressBar.Value = 0;
   StateLabel.Content = "Start..."

   // Do Things   

   ProgressBar.Value = 50;
   StateLabel.Content = "Running part 2"

   // Do things

   ProgressBar.Value = 100;
   StateLabel.Content = "Finished. Closing progress window..."

   Thread.Sleep(1000);
   this.Close();
}

标签: wpf

解决方案


除了这里的评论之外,还应该有一个适合您挑战的工作片段:

    private void MainWindowButton_OnClick(object sender, RoutedEventArgs e)
    {
        ((MainWindowViewModel)this.DataContext).ButtonClickEvent();
        Application.Current.Dispatcher.Invoke(Do);
    }

    public async Task Do()
    {


        myLabel.Content = "Start...";

        // Do Things   
        await Task.Delay(1000);
        myLabel.Content = "Running part 2";

        // Do things
        await Task.Delay(1000);
        myLabel.Content = "Finished.";
    }

要了解有关在 WPF 中解决冻结的更多信息,我发现这个问题很有启发性。


推荐阅读