UIスレッドからGUIを強制的に更新する
2023-10-21 17:55:43
質問
WinForms で、UI スレッドから強制的に即時 UI 更新を行うにはどうすればよいですか。
私がやっていることは、おおよそ
label.Text = "Please Wait..."
try
{
SomewhatLongRunningOperation();
}
catch(Exception e)
{
label.Text = "Error: " + e.Message;
return;
}
label.Text = "Success!";
操作前にラベルテキストが "お待ちください..." に設定されない。
操作のために別のスレッドを使用して解決しましたが、毛むくじゃらになってしまうので、コードを簡略化したいと思います。
どのように解決するのですか?
最初は、OP がなぜまだ回答の 1 つに印を付けていないのか不思議に思いましたが、自分で試してみて、それでもうまくいかなかったので、もう少し掘り下げてみたところ、この問題には私が最初に想定したよりもはるかに多くのものがあることがわかりました。
同様の質問を読むことで、より良い理解を得ることができます。 なぜコントロールはプロセスの途中で更新/リフレッシュしないのですか?
最後に、念のためですが、以下のようにすると、ラベルを更新させることができました。
private void SetStatus(string status)
{
lblStatus.Text = status;
lblStatus.Invalidate();
lblStatus.Update();
lblStatus.Refresh();
Application.DoEvents();
}
しかし、私が理解したところでは、これはエレガントで正しいアプローチとは程遠いものです。これは、スレッドがどの程度ビジー状態であるかに応じて動作するかどうかが決まるハックです。
関連
-
[解決済み】クロススレッド操作が有効でない。作成されたスレッド以外のスレッドからアクセスされたコントロール
-
[解決済み】Entity FrameworkからのSqlException - セッション内で他のスレッドが動作しているため、新しいトランザクションは許可されません。
-
[解決済み】 C# 条件演算子エラー 代入、call、increment、decrement、await、new object 式のみ文として使用可能です。
-
[解決済み】Android "ビュー階層を作成した元のスレッドだけが、そのビューに触れることができる"
-
[解決済み] 他のスレッドからGUIを更新するにはどうすればよいですか?
-
[解決済み] Javaにおける "implements Runnable "と "extends Thread "の違いについて
-
[解決済み] C#でenumからint値を取得する
-
[解決済み] プロセスとスレッドの違いは何ですか?
-
[解決済み] スレッドを強制終了させる方法はありますか?
-
[解決済み】C#のイベントとスレッドセーフについて
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】GDI+、JPEG画像をMemoryStreamに変換する際にジェネリックエラーが発生しました。
-
[解決済み】プログラム実行中に1秒待つ
-
[解決済み] 保護レベルによりアクセス不能になりました。
-
[解決済み】EF 5 Enable-Migrations : アセンブリにコンテキストタイプが見つかりませんでした
-
[解決済み】"指定されたパスのフォーマットはサポートされていません。"
-
[解決済み】C#のequal to演算子でtextとvarcharのデータ型は互換性がない
-
[解決済み】 C# 条件演算子エラー 代入、call、increment、decrement、await、new object 式のみ文として使用可能です。
-
[解決済み】名前 'ViewBag' が現在のコンテキストに存在しない - Visual Studio 2015
-
[解決済み] 他のスレッドからGUIを更新するにはどうすればよいですか?
-
[解決済み】Application.DoEvents()の使用について)