C# 更改UI等待2000毫秒,然后再次更改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=

我想显示一些文本和图片,使文本在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="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;
}