2009-08-17 25 views
4

IsIndeterminateプロパティをtrueに設定してWPFプログレスバーコントロールを使用しようとしています。 私が持っている問題は、更新されないということです。WPFプログレスバーの使用方法は?

私はこのような何かやっている:私はスレッドでこれをラップして、ディスパッチャオブジェクトでそれを派遣しようとした

pbProgressBar.Visibility = Visibility.Visible; 
//do time consuming stuff 
pbProgressBar.Visibility = Visibility.Hidden; 

を。 この問題をどのように解決する必要がありますか。

+0

あなたはそれが更新されないとはどういう意味ですか? IsIndeterminateをtrueに設定すると、連続した "進捗状況"が表示され、valueプロパティは無視されるため、実際に更新されることはなく、継続的な進捗状況が示されます。あなたは何もしないと言っていますか? –

答えて

5

あなたがバックグラウンドスレッドでものを時間のかかる作業を行う必要があり、あなたはVisibilityは、バックグラウンドスレッドがその事を行っている後までHiddenに戻って設定されていないことを確認する必要があります。基本的なプロセスは次のとおりです。

private void _button_Click(object sender, RoutedEventArgs e) 
{ 
    _progressBar.Visibility = Visibility.Visible; 

    new Thread((ThreadStart) delegate 
    { 
     //do time-consuming work here 

     //then dispatch back to the UI thread to update the progress bar 
     Dispatcher.Invoke((ThreadStart) delegate 
     { 
      _progressBar.Visibility = Visibility.Hidden; 
     }); 

    }).Start(); 
} 
+0

スレッドを強制終了する必要がありますか? –

+0

いいえ、終了するとクリーンアップされます。これは、バックグラウンドでタスクを実行するためのかなりの方法の1つです。 ThreadPoolも見てみましょう。 –

+0

実際には、OnCompleted通知を無料で提供するため、このような一時的なタスクがある場合、BackgroundWorkerが適しています。これはUIスレッド上にあります。 また、Invokeを呼び出すことによってワーカースレッドをブロックする必要はありません。BeginInvokeはうまくいくでしょう –

関連する問題