wpf - 如何在不阻塞线程的情况下更新 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();
}
解决方案
除了这里的评论之外,还应该有一个适合您挑战的工作片段:
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 中解决冻结的更多信息,我发现这个问题很有启发性。
推荐阅读
- c# - 我想为网站开发一个 CRUD 界面,但在 Edit 方法中不断出现错误
- botframework - 如何通过直线将活动从机器人对话框(c#)发送到客户端(角度)
- android - OnItemSelected 不适用于自定义微调器适配器类
- matlab - “double”类型的输入参数的未定义函数“taylorexp”
- file - 从 Kotlin 中的巨大文件中读取第一行
- java - spring boot 应用程序中配置的两个数据库
- elasticsearch - 松紧带。查找其子项与查询不匹配的文档
- plot - 从 gnuplot 中的数据文件中选择单行
- php - strpos() 仅有时有效
- php - PHP cURL通过API在帖子中抛出500错误