C#
解決2: IDisposableラッパーでスコープ化する
出典: WinForms で UseWaitCursor が戻らないバグの解決法(業務SE目線) — 解決2: IDisposableラッパーでスコープ化する
// ✅解決2-b:使用例
private void btnLoad_Click(object sender, EventArgs e)
{
using (new WaitCursorScope(this))
{
var dt = new DataTable();
using (var conn = new SqlConnection(_connectionString))
using (var adapter = new SqlDataAdapter("SELECT * FROM big_table", conn))
{
adapter.Fill(dt);
}
dataGridView1.DataSource = dt;
}
}
▸ この 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-a: IDisposableラッパーの定義 public sealed class WaitCursorScope : IDisposable { private readonly Form _form;未収録
解決2: IDisposableラッパーでスコープ化する
#90f0b8a724f2
// ✅解決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
