Здесь у вас есть простая программа WPF:Реализация паузы в WPF
<!-- Updater.xaml -->
<Window x:Class="Update.Updater"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
DataContext="{Binding RelativeSource={RelativeSource Self}}">
<Grid>
<StackPanel>
<Button Click="Button_Click" Height="50"></Button>
<Label Content="{Binding Label1Text}" Height="50"></Label>
<Label Content="{Binding Label2Text}" Height="50"></Label>
</StackPanel>
</Grid>
</Window>
// Updater.xaml.cs
using System.Threading;
using System.Windows;
namespace Update
{
public partial class Updater : Window
{
public Updater()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
Label1Text = "It is coming...";
Thread.Sleep(3000);
Label2Text = "It is here!";
}
public string Label1Text
{
get { return (string)GetValue(CategoryProperty); }
set { SetValue(CategoryProperty, value); }
}
static readonly DependencyProperty CategoryProperty = DependencyProperty.Register("Label1Text", typeof(string), typeof(Updater));
public string Label2Text
{
get { return (string)GetValue(Label2TextProperty); }
set { SetValue(Label2TextProperty, value); }
}
static readonly DependencyProperty Label2TextProperty = DependencyProperty.Register("Label2Text", typeof(string), typeof(Updater));
}
}
Намерение состоит в том, что при нажатии кнопки, первая метка отображается It is coming...
. Затем программа спит в течение 3 секунд, и, наконец, вторая метка отображает It is here!
. Однако наивная реализация ниже не работает. Если вы запустите его и щелкните по кнопке, произойдет следующее: программа засыпает в течение 3 секунд, а затем два текста ярлыков отображаются одновременно. Вы знаете, как исправить программу, чтобы она выполнялась по назначению?
Есть ли разница между этим предложением и просто вызвать 'label1.UpdateLayout(); 'без использования диспетчера? – user181813
Да, это не работает, просто вызвав UpdateLayout. Метод возвращается немедленно и планирует обновление для последующего использования в потоке пользовательского интерфейса (возможно, когда событие Button Click завершается). Затем поток засыпает в течение 3 секунд и планирует другое изменение, и когда метод Button Click заканчивается, поток пользовательского интерфейса, наконец, отображает представление. В Windows Forms вы можете использовать только метод Update на ярлыке, но WPF работает по-разному. –