この処理の間だけ待機カーソルを表示しておきたい、ってことが良くあります。
やり方をいろんなサイトで調べても、一時的にカーソルを待機カーソルに設定して、用が済んだたら戻す、というようなコードばかり見かけたのですが、
途中で例外が飛んできたらどうすんの?(try finallyで捕まえてカーソル戻すの?)とかいちいち考えるのが面倒なので、クラス化してみました。

VC++MFCのCWaitCursorと同じようなものです。

using System;
using System.Windows.Forms;

namespace Takabosoft.Common.Forms
{
    class WaitCursor : IDisposable
    {
        private Cursor old = null;

        internal WaitCursor()
        {
            old = Cursor.Current;
            Cursor.Current = Cursors.WaitCursor;
        }

        #region IDisposable メンバー

        public void Dispose()
        {
            Cursor.Current = old;
        }

        #endregion
    }
}

(ファイナライザが無いのは仕様です^^;)

あとは、待機カーソルにしたい処理をusingで囲ってもらえれば、その間には待機カーソルになると思います。
例外が中で発生しても、ちゃんとカーソルが戻る予定です。

using (WaitCursor wait = new WaitCursor())
{
    // ここを処理している間、待機カーソルになる
}

まだ、あまり検証していませんが。

記事検索

アーカイブ