私が考えることができる最も簡単なことは、IDisposableを実装するクラスを作成し、コンストラクターで待機カーソルを変更して、Disposeメソッドで元に戻すことです。これにより、ラップするコードの実行中に例外がスローされた場合でも、カーソルが待機カーソルとしてスタックすることはありません...
public class WaitCursor : IDisposable
{
private Cursor m_defaultCursor = null;
public WaitCursor()
{
m_defaultCursor = Cursors.Current;
Cursors.Current = Cursors.WaitCursor;
Application.UseWaitCursor = true;
}
public void Dispose()
{
Cursors.Current = m_defaultCursor;
Application.UseWaitCursor = false;
}
}
次に、実行時間の長いコードをusingステートメントでラップするだけです...
using (var waitCursor = new WaitCursor())
{
// some long running code...
}
そのようなものは、ラップされたコードもおそらく時間がかかることを将来の開発者に明らかにします