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

时间:2012-07-25 14:36:17

标签: c# wpf multithreading

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

3 个答案:

答案 0 :(得分: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());
}

答案 1 :(得分:0)

使用background worker进行实际工作(for循环)并订阅他的功能完成时引发的事件。您还可以检查进度等,以获得更有价值的进度表。

答案 2 :(得分:0)

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