這裏實現暫停你有一個簡單的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就行不通。該方法立即返回,並在稍後的UI線程中調度更新(可能在Button Click事件完成時)。然後,線程休眠3秒鐘,並安排另一次更改,當Button Click方法結束時,UI線程最終呈現視圖。 在Windows窗體中,您可以只使用Label上的Update方法,但WPF的工作方式不同。 –