現在、VB.NETのシステムを改修しているのでVB.NETのソースコードです。
まず、こんなクラスを作ります。
(フォーム内のコントロールをdisableにするコードも余分に入ってます)
Public Class FormWait Implements IDisposable Private frm As Form Private ctls As New ArrayList Private cur As Cursor Public Sub New(ByVal _frm As Form) frm = _frm cur = frm.Cursor frm.Cursor = Cursors.WaitCursor For Each ctl As Control In frm.Controls If ctl.Enabled Then ctl.Enabled = False ctls.Add(ctl) End If Next End Sub Public Sub Dispose() Implements System.IDisposable.Dispose For Each ctl As Control In ctls ctl.Enabled = True Next frm.Cursor = cur End Sub End Class
次に、こんな感じでtry~Finallyで使用します。
Dim wait As New FormWait(Me) Try ' ' 主処理・・・ ' Finally wait.Dispose() End Try
using句が使えるバージョンならusing句のほうが良いと思います。
ちなみに、using句はtry~Finallyのシンタックス・シュガーです。
実はDispose()を呼ばなければいけない仕様は、あまり好きではなく
C++のようにデストラクタがインスタンスのスコープと連動していないのが
VB.NETやC#でかなり残念なことだと思っています。
ただ、これはガーベージコレクションと引き換えに発生した仕様で
大きなメリットに隠れた小さなデメリットなのでしょう・・・