2012-07-25 24 views
0

我的用戶界面上有一個按鈕和一個標籤。當我點擊按鈕時,我想在標籤上顯示「進行中」,直到for循環結束,然後再次顯示相同標籤應顯示收集結果。顯示正在進行的標籤,直到完成操作

private void button1_Click(object sender, RoutedEventArgs e) 
{ 
    label1.Content = "In progress..";   
    List<string> intList = new List<string>(); 
    for (long i = 0; i <= 50000000; i++) 
    { 
    intList.Add("Test"); 
    } 
    label1.Content = intList.ToString(); 
} 
+1

你在問題中的代碼有什麼問題? – 2012-07-25 14:38:52

回答

2

你需要farm the work out to a background thread,否則你的循環將繼續在UI線程上,因此你看不到「進步」。

您可以使用BackgroundWorkerTask來實現:

private void button1_Click(object sender, RoutedEventArgs e) 
{ 
    label1.Content = "In progress.."; 
    Task.Factory.StartNew<List<string>>(
    () => 
    { 
     List<string> intList = new List<string>(); 
     for (long i = 0; i <= 50000000; i++) 
     { 
      intList.Add("Test"); 
     } 

     return intList; 
    }) 
    .ContinueWith(
     (t) => label1.Content = t.Result.ToString(), 
     TaskScheduler.FromCurrentSynchronizationContext()); 
} 
+0

嗨,我收到一個異常,當我試圖使用您的代碼「非靜態字段,方法或屬性需要對象引用'System.Threading.Tasks.TaskFactory.StartNew (System.Func )' 「 – user1399377 2012-07-25 14:43:18

+0

@ user1399377:代碼可能會懷孕,而應該是'Task.Factory'。 – user7116 2012-07-25 14:45:18

+0

好吧,讓我試試 – user1399377 2012-07-25 14:46:13

0

使用background worker做你的實際工作(for循環)和訂閱他的函數結束時,他引發事件。您還可以檢查進度等,以獲取更有價值的進度表。

相關問題