C# 更改UI等待2000毫秒,然后再次更改UI
我想显示一些文本和图片,使文本在2秒钟内可见,然后图片将替换它。 也就是在那个时候不要让UI被卡住 我尝试了以下方法: 在WPF UI中:C# 更改UI等待2000毫秒,然后再次更改UI,c#,wpf,multithreading,C#,Wpf,Multithreading,我想显示一些文本和图片,使文本在2秒钟内可见,然后图片将替换它。 也就是在那个时候不要让UI被卡住 我尝试了以下方法: 在WPF UI中: <Border x:Name="ComparisonResultImageBox" Visibility="Visible" Grid.Row="2" Grid.Column="2" Background="White" Margin="8,5,8,5"> <Image x:Name=
<Border x:Name="ComparisonResultImageBox" Visibility="Visible" Grid.Row="2" Grid.Column="2" Background="White" Margin="8,5,8,5">
<Image x:Name="DiffrenceImage"></Image>
</Border>
问题在于,文本在睡眠时间内不会显示……您不应该在UI线程上使用任何阻塞调用(长时间运行的同步) 最简单的改变是使用
async任务
或async void
private async Task ClearComparePicture() {
DiffrenceImage.Source = null;
LoadingComparisonResultLabel.Visibility = Visibility.Visible;
ComparisonResultImageBox.Visibility = Visibility.Collapsed;
await Task.Delay(2000);
DiffrenceImage.Source = newBitmapImage;
LoadingComparisonResultLabel.Visibility = Visibility.Collapsed;
ComparisonResultImageBox.Visibility = Visibility.Visible;
}
您不应该在UI线程上使用任何阻塞调用(长时间运行的同步) 最简单的改变是使用
async任务
或async void
private async Task ClearComparePicture() {
DiffrenceImage.Source = null;
LoadingComparisonResultLabel.Visibility = Visibility.Visible;
ComparisonResultImageBox.Visibility = Visibility.Collapsed;
await Task.Delay(2000);
DiffrenceImage.Source = newBitmapImage;
LoadingComparisonResultLabel.Visibility = Visibility.Collapsed;
ComparisonResultImageBox.Visibility = Visibility.Visible;
}
GUI编程的基础知识是,使用Sleep()挂起UI线程将阻止它执行任何与UI相关的任务。比如更新屏幕上的文本。将Dispatcher或异步代码与Task.Delay()一起使用。GUI编程的基础知识是,使用Sleep()挂起UI线程将阻止它执行任何与UI相关的任务。比如更新屏幕上的文本。改为对Task.Delay()使用Dispatcher或异步代码。。
private async Task ClearComparePicture() {
DiffrenceImage.Source = null;
LoadingComparisonResultLabel.Visibility = Visibility.Visible;
ComparisonResultImageBox.Visibility = Visibility.Collapsed;
await Task.Delay(2000);
DiffrenceImage.Source = newBitmapImage;
LoadingComparisonResultLabel.Visibility = Visibility.Collapsed;
ComparisonResultImageBox.Visibility = Visibility.Visible;
}