解決策を見つけられないような問題が発生しました。いくつかの回答を読んで、BackgroundWorkerスレッドが必要であることを知っています。このソリューションを機能させるが、私はまだ少し問題に走っている。バックグラウンドワーカーの進行状況バーがロードされない
小さなサイズの2番目のフォームがあり、ProgressBar StyleをMarqueeに設定して画面を中央に設定すると、ローディングバーをエミュレートするためのこの2番目のフォームには何もありません。私のデータがつかみ、私はそれがこのように書かれているデータベースからのデータを解析し、メインフォーム、上のコードの集中セクションにおいて
:バックグラウンドワーカーは、以下のような定義され
GetData()
{
bwLoading.RunWorkerAsync();
//Runs all the processing
bwLoading.CancelAsync();
}
、メインフォーム上にも表示されます。
private void bwLoading_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
frmLoading lb = new frmLoading();
bool running = true;
while (running)
{
if ((worker.CancellationPending == true))
{
lb.Close();
running = false;
}
else
{
lb.Show();
}
}
}
私はに実行した問題は、この方法では、データを収集し、プロセスとデータのロードが完了したときに消えないばかりを開始したときに表示さんプログレスバーが含まれているロードフォームを示していることですが、ロードしようとしているようにウィンドウは空ですが、ウィンドウは表示されません。なぜこれが動かないのか分かりません。
ローディングフォームを使用するバックグラウンドワーカーが別のスレッドを作成していませんか?それとも、私の読書に欠けていることがありますか?
なぜCancelAsyncですか?それを取り除こうとした? –
DoWork()内にフォームを作成したり表示したりしないでください。 –
@HenkHolterman私はあなたが私の質問を正しく理解しているとは思わない。私は処理中に "ビジー"ボックスを表示しています。キャンセルは、バックグラウンドワーカーが「ビジー」ボックスを非表示にするタイミングを知るようにするためです。 – Sorean