显示正在进行的标签,直到操作完成



我的UI上有一个按钮和一个标签。当我点击按钮时,我想在标签上显示"进行中",直到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();
}

您需要将工作转移到后台线程,否则您的循环将在UI线程上继续,因此您看不到"进度"。

您可以使用BackgroundWorker或Task来完成此任务:

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());
}

使用后台工作人员来完成实际工作(for循环),并在函数完成时订阅他引发的事件。你也可以检查进度等,以获得更有价值的进度表。

您应该使用BackgroundWorker来完成此操作。这似乎是一个很好的例子来说明如何做到这一点。http://elegantcode.com/2009/07/03/wpf-multithreading-using-the-backgroundworker-and-reporting-the-progress-to-the-ui/

最新更新