0

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

3 回答 3

2

您需要将工作分配给后台线程,否则您的循环会在 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());
}
于 2012-07-25T14:40:43.437 回答
0

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

于 2012-07-25T14:41:26.683 回答
0

你应该用 BackgroundWorker 来做这件事。这似乎是如何做到这一点的好例子。 http://elegantcode.com/2009/07/03/wpf-multithreading-using-the-backgroundworker-and-reporting-the-progress-to-the-ui/

于 2012-07-25T14:45:59.460 回答