C#
UseWaitCursorの罠—マウスがフォーム外だと効かない
出典: WinForms で UseWaitCursor が戻らないバグの解決法(業務SE目線) — UseWaitCursorの罠—マウスがフォーム外だと効かない
//画面全体にWaitCursorを効かせる場合
Application.UseWaitCursor = true;
try
{
/* 重い処理 */
}
finally
{
Application.UseWaitCursor = false;
}
▸ この snippet は実行結果未収録
▸ 実行結果は未収録です
Source収録記事
この snippet は記事の「UseWaitCursorの罠—マウスがフォーム外だと効かない」セクションに登場する。コードの前後の文脈・ハマりどころの解説は記事本文で。
同じ記事から
5 件// ❌ダメな書き方(業務系で多い) private void btnLoad_Click(object sender, EventArgs e) { Cursor.Current = Cursors.WaitCursor;未収録
なぜCursor.Currentだけだと砂時計が出ないのか
#664c8dc93713
// ✅解決1: try-finally + UseWaitCursor private void btnLoad_Click(object sender, EventArgs e) { this.UseWaitCursor = true;未収録
解決1: try-finallyで確実に戻す(同期処理向け)
#15920e216e92
// ✅解決2-a: IDisposableラッパーの定義 public sealed class WaitCursorScope : IDisposable { private readonly Form _form;未収録
解決2: IDisposableラッパーでスコープ化する
#90f0b8a724f2
// ✅解決2-b:使用例 private void btnLoad_Click(object sender, EventArgs e) { using (new WaitCursorScope(this))未収録
解決2: IDisposableラッパーでスコープ化する
#d1e30ad15372
// ✅解決3: async/await + Task.Run private async void btnLoad_Click(object sender, EventArgs e) { btnLoad.Enabled = false;未収録
解決3: async/await + Task.RunでUIスレッドを解放する
#b2fa15052272
