2013-03-25 96 views
1

對不起,我是一個新手,當談到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"; 
    } 
} 

回答

2

看不到改變的原因是因爲這是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 
+0

謝謝!這裏是工作的代碼: – Dudeman3000 2013-03-26 00:05:21