执行期间WPF标签内容显示
对不起,对于WPF,我是个新手: 当我单击一个按钮时,我希望在函数启动时看到标签中显示的一条消息,然后我希望在函数完成时看到另一条消息 在这里的代码中,我只看到单击按钮时显示的最后一条消息值。有人能给我解释一下原因吗 既然这不起作用,我该如何实现我真正想要的——在一段时间内看到一条消息(如“处理”),然后在函数完成时看到另一条消息(如“完成”)执行期间WPF标签内容显示,wpf,events,label,Wpf,Events,Label,对不起,对于WPF,我是个新手: 当我单击一个按钮时,我希望在函数启动时看到标签中显示的一条消息,然后我希望在函数完成时看到另一条消息 在这里的代码中,我只看到单击按钮时显示的最后一条消息值。有人能给我解释一下原因吗 既然这不起作用,我该如何实现我真正想要的——在一段时间内看到一条消息(如“处理”),然后在函数完成时看到另一条消息(如“完成”) public partial class MainWindow : Window { public MainWindow() {
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
MessageLabel.Content = "I never see this";
System.Threading.Thread.Sleep(2000);
MessageLabel.Content = "I only see this";
}
}
谢谢你,布拉希玛!下面是我希望对BackgroundWorker对象执行的代码
public partial class MainWindow : Window
{
private BackgroundWorker backgroundWorker1 = new BackgroundWorker();
public MainWindow()
{
InitializeComponent();
backgroundWorker1.WorkerReportsProgress = true;
backgroundWorker1.WorkerSupportsCancellation = false;
backgroundWorker1.DoWork += worker_DoWork;
backgroundWorker1.RunWorkerCompleted += worker_RunWorkerCompleted;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
MessageLabel.Content = "I see this now";
if (backgroundWorker1.IsBusy != true)
{
backgroundWorker1.RunWorkerAsync();
}
}
private void worker_DoWork(object sender, DoWorkEventArgs e)
{
System.Threading.Thread.Sleep(2000);
}
private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
MessageLabel.Content = "and I see this too";
}
}
您看不到更改的原因是,这都是在UI线程上运行的,在第二次更新标签之前,UI线程没有机会刷新您的屏幕。
您应该使用来运行代码的“重”部分(例如,标签的Sleep+更新) 代码的快速示例:
private void Button_Click(object sender, RoutedEventArgs e)
{
MessageLabel.Content = "I never see this";
BackgroundWorker bw = new BackgroundWorker();
bw.DoWork += (s,a) =>
{
Thread.Sleep(2000);
};
bw.RunWorkerCompleted += (s, a) =>
{
MessageLabel.Content = "I saw it now";
};
bw.RunWorkerAsync(); // Start BackgroundWorker