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スレッドで続行されるため、「進行状況」が表示されません。

これを実現するには、 BackgroundWorkerまたはタスクを使用できます。

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

あなたは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 に答える
0

バックグラウンドワーカーを使用して実際の作業(forループ)を実行し、関数が完了したときに発生するイベントをサブスクライブします。進捗状況などを確認して、より価値のある進捗メーターを探すこともできます。

于 2012-07-25T14:41:26.683 に答える