7

私は GUI を設計しており、時間がかかりがちなアクションを呼び出した後に「お待ちください」メッセージとして効果的に使用するラベルがあります。ラベルのテキストは静的です。ラベル コントロールの VS2010 のプロパティで設定しました。

フォームでそのアクションを実行すると、時間のかかるプロセスが完了するまで通常は非表示になっているコントロールを .Show() し、次に .Hide() します。.Show() にヒットすると、ラベルがポップアップします (BorderStyle を Fixed3D に設定しているため、ラベルの境界線が表示されるため、これはわかっています) が、テキストはまったくありません。ラベルを自動サイズに設定しようとしましたが、無駄ではありませんでした。テキストは灰色の黒に設定されているため、目に見えないインクはなく、すべてが表示され、フォントが設定されています。コードは私が望むように実行されますが、ラベルにはテキストがありません。私は途方に暮れています。

何か案は?

4

3 に答える 3

12

時間のかかるプロセスが同じスレッドで発生している場合は、更新/再描画の問題 (プロセッサがビジー状態で UI 要求を処理できない) である可能性があります。長時間実行されるプロセスを開始する前にウィンドウを更新するか、より適切には、時間のかかるプロセスを BackgroundWorker に配置してみてください。

于 2012-10-25T21:06:34.100 に答える
6

時間のかかるプロセスがバックグラウンド スレッドで実行されていない場合、メッセージ処理が行われていないため、UI は更新されていません。コントロールは、WM_Paint メッセージで自分自身を再描画します。

コントロールの状態を変更した後、長いプロセスに飛び込む前に、コントロールまたはウィンドウ ハンドルの親 (フォーム) で Refresh を呼び出してみてください。

または、実行時間の長いプロセスをバックグラウンド スレッド (.NET 4.0 タスクを参照) に移動して、UI スレッドを解放します。

于 2012-10-25T21:06:47.470 に答える
3

何かが足りないのかもしれませんが、設定してみませんlabel.Visibleか?

于 2012-10-25T21:03:51.943 に答える