2017-12-04 9 views
1

の下に作業完了後に更新されません。私はwindow1に進捗バーを表示するために使用しています。しかし、私のメインウィンドウで作業が完了すると、プログレスバーがフリーズして、バックグラウンドワーカーが何段階にいるかにジャンプします。プログレスバーを常に更新する必要はありますか?仕事は他のウィンドウwpf c#進捗バーは、バックグラウンドワーカー

public SplashScreen() 
     { 
      InitializeComponent(); 
      //Timer(); 


      CreateBackGroundWorker(); 
      // int shareProgressBarValue = MainSharePage.shareProgressBarValue; 

      LoginPage LoginPage = new LoginPage(); 
      LoginPage.Show(); 


     } 

     private void CreateBackGroundWorker() 
     { 
      BackgroundWorker worker = new BackgroundWorker(); 
      worker.RunWorkerCompleted += worker_RunWorkerCompleted; 
      worker.WorkerReportsProgress = true; 
      worker.DoWork += worker_DoWork; 
      worker.ProgressChanged += worker_ProgressChanged; 
      worker.RunWorkerAsync(); 
     } 

     private void worker_ProgressChanged(object sender, ProgressChangedEventArgs e) 
     { 
      this.ProgressBar.Value = e.ProgressPercentage; 
      //ShareProgressBarText.Text = (string)e.UserState; 
     } 

     private void worker_DoWork(object sender, DoWorkEventArgs e) 
     { 
      BackgroundWorker worker = sender as BackgroundWorker; 
      worker.ReportProgress(0, String.Format("Processing Iteration 1.")); 
      for (int i = 0; i < 100; i++) 
      { 
       Thread.Sleep(1000); 
       worker.ReportProgress((i + 1), String.Format("Processing Iteration {0}.", i + 2)); 
      } 

      worker.ReportProgress(100, "Done Processing."); 
     } 
+0

これを試してみてください if(i%5 == 0) worker.ReportProgress((i + 1)、String.Format( "Processing Iteration {0}。"、i + 2)); – pix

+0

上記は単独では正常に動作するはずです...うまくいかない場合は、おそらく別の場所で何か問題が起きています...あなたは1つのUIスレッドを持っていて、スプラッシュを表示しますか?また、イベントハンドラを手動で接続する場合は、通常は手動で削除する必要があります。 – Phil1970

答えて

2

に行われている場合でも、私はあなたのコードを貼り付け、コピーしてLoginPageを扱う2つの行を削除し、それは私のために完璧に動作します。

次に、LoginPageの代わりにウィンドウを作成して空にし、同じ2行を追加して表示しても機能します。

私はあなたのLoginPageに問題があると思いますが、これはUIスレッドを何らかの方法でブロックする必要があります。

+0

これは質問に対する答えを提供しません。批評をしたり、著者の説明を求めるには、投稿の下にコメントを残してください。 - [レビューから](/レビュー/低品質の投稿/ 18150574) – Alejandro

+0

まずはご協力いただきありがとうございます。ログインページは本質的にウェブスクラップ(ウェブサイトのソースコードを取得)し、特定のデータを検索します。これを10回行う。約1分半かかります。この間、プログレスバーは更新されませんが、終了すると最後にジャンプします。これまでのすべてのあなたの助けをありがとう:) –

+0

それはバックグラウンドワーカーでもそれをしますか?そうでない場合は、問題があると思います – Kilazur

関連する問題