の下に作業完了後に更新されません。私は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.");
}
これを試してみてください if(i%5 == 0) worker.ReportProgress((i + 1)、String.Format( "Processing Iteration {0}。"、i + 2)); – pix
上記は単独では正常に動作するはずです...うまくいかない場合は、おそらく別の場所で何か問題が起きています...あなたは1つのUIスレッドを持っていて、スプラッシュを表示しますか?また、イベントハンドラを手動で接続する場合は、通常は手動で削除する必要があります。 – Phil1970