2010-12-07 30 views
0

私が書いているアプリケーションでは、特定のボタンを押した後に多くのデータをリストビューに読み込む必要があります。これはしばらく時間がかかることがあるので、ユーザーに簡単な読み込み画面を表示したいと考えています。 私はこれに、1つのラベルを付けた非常に単純なフォームを作成しました。 Form.Show()を実行する前にデータを取得し、Form.Close()を終了します。これは部分的に機能します:ローディング画面が表示され、適切なタイミングで終了しますが、表示されているように、ラベルは表示されません。C#読み込み時にラベルが表示されない

私はBackgroundWorkerの助けを借りてこの問題のスクリーン問題をプログラムするべきだと知っていますが、私は経験豊富なC#プログラマーではないので、何とか何とか表示するようにすればもっと楽しくなります。

このラベルを強制的に表示することは可能ですか、別の解決策を見つける必要がありますか?

Screenshot

+0

多分疑問に思うかもしれませんが、label1.Visible = trueに設定しましたか?それは見ることができるウィンドウの一部にありますか?テキストの色は背景色と同じですか? –

答えて

3

ロードプロセスがすべてのリソースを占有するので、UIメッセージポンプがラベルを更新する時間がない/画面を更新。

Application.DoEvents()を呼び出して、ラベルの更新を強制することができます。ただし、 'Application.DoEvents'を使用すると、imhoは 'code-smell'になり、デザインがそれほど良くないことが示されます。だから避けるべきです。

したがって、DoEventsを使用することは、この問題に対する最良の解決策ではありません。それは単なる症状の修正です。

あなたはすでに自分で最高の解決策を述べました。別のスレッドを使用してすべてのデータを読み込みます。 (実際には、この目的のためにBackGroundWorkerを使用することができます。これは、多くの配管コードを抽象化するためです)。

+1

Application.DoEvents()は避けるべきです。 –

+0

私は全く同意します。だからこそ私はそれが最善の解決策ではなく、バックグラウンド労働者が優先されるべきだと言います。 –

+0

そして、私はちょうど私が尋ねたことを行うApplication.DoEvents()メソッドである単純なソリューションを使用するつもりです。 これはたくさんの行がない、とてもシンプルなプログラムです。上記の方法を使用するのはあまり専門的ではないかもしれませんが、それは非常に専門的なアプリケーションではありません。 あなたのソリューションのおかげでフレデリク、私はあなたがそれを与えるために悪い感じるつもりだと感じている。 – Mee

3

BackgroudWorkerが、でもC#は非常に強力かつシンプルなlangugage

See Here

である私はあなたがBackgroundWorkerの持つ任意のより多くの助けを必要としない、ということはほとんど確信していますが、任意のクエリを持っている場合、非常に使いやすいですあなたは常にSOに投稿できますか? Collabartive IntelligenceはSOとは何ですか?

関連する問題