C#
解決2: IDisposableラッパーでスコープ化する
出典: WinForms で UseWaitCursor が戻らないバグの解決法(業務SE目線) — 解決2: IDisposableラッパーでスコープ化する
// ✅解決2-a: IDisposableラッパーの定義
public sealed class WaitCursorScope : IDisposable
{
private readonly Form _form;
private readonly bool _previous;
public WaitCursorScope(Form form)
{
_form = form ?? throw new ArgumentNullException(nameof(form));
_previous = _form.UseWaitCursor;
_form.UseWaitCursor = true;
}
public void Dispose()
{
_form.UseWaitCursor = _previous;
}
}
▸ この snippet は実行結果未収録
▸ 実行結果は未収録です
Source収録記事
この snippet は記事の「解決2: IDisposableラッパーでスコープ化する」セクションに登場する。コードの前後の文脈・ハマりどころの解説は記事本文で。
同じ記事から
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-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
//画面全体にWaitCursorを効かせる場合 Application.UseWaitCursor = true; try {未収録
UseWaitCursorの罠—マウスがフォーム外だと効かない
#cd898c28b53e
