WPF标签内容显示在执行
问题描述:
对不起,我是一个新手,当谈到WPF:WPF标签内容显示在执行
当我点击一个按钮,我想看看在标签中显示的一个消息功能启动时,和那么我想看到的功能完成时另一条消息显示。
在这里的代码,我只看到单击该按钮时,显示的最后一条消息的价值。可有人向我解释为什么?
由于这不起作用,我将如何去完成我真正想要的功能 - 查看一段时间内的消息(如“处理”),然后在函数完成时看到另一条消息(如“完成”) ?
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";
}
}
谢谢Blachshma!下面是代码,做什么,我想用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线程,这并不有机会刷新屏幕,直到后的标签被更新,第二次在所有运行。
您应该使用BackgroundWorker运行代码的“重”的一部分(例如睡眠+标签的更新)
快速例如与您的代码:
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
谢谢!这里是工作的代码: – Dudeman3000 2013-03-26 00:05:21