19:44:21)追加された行はこの色です。削除された行はこの色です。[#qf3d3efd]#column(注意){{この記事の最新版は「[[進行状況ダイアログを表示する>http://dobon.net/vb/dotnet/programing/progressdialog.html]]」で公開しています。}}前回は時間のかかる処理で進行状況を表示する方法と、さらにキャンセルボタンを付ける方法を紹介しました。その記事の最後でダイアログ使って進行状況を表示し、キャンセルできるようにするサンプルを私のサイトで紹介すると書きましたが、それをここで紹介します。このような進行状況ダイアログを作成するには、前号で説明したとおり、Application.DoEventsメソッドを使うか、マルチスレッドを使うということになります。DoEventsメソッドを使って進行状況ダイアログを表示する場合、前回紹介したような欠点があるだけでなく、別の問題が生じます。いうのは、本来ならば進行状況ダイアログはShowDialogメソッドによりモーダルで表示したいところですが、モーダルで表示するとShowDialog以降のコードはダイアログが閉じられるまで実行されないため、進行状況を示したい時間のかかる処理はダイアログのクラス内に記述(あるいは、デリゲートやイベントを使用)しなければならなくなります。ダイアログを表示し、その直後に時間のかかる処理を記述できるようにするには、ダイアログはモードレスでメインフォームをオーナーとして表示し、メインフォームのEnabledプロパティをFalseにして操作できないようにするといったごまかしが必要になります。ここではこのようなDoEventsメソッドを使った方法ではなく、マルチスレッドによる方法のコードのみを紹介します(DoEventsメソッドを使った方法は今までの応用で簡単にできるでしょう)。マルチスレッドによる方法では、上記のような問題はクリアされます。下に進行状況ダイアログを表示するためのクラス(ProgressDialogクラス)のサンプルを示します。.NETのフォームデザイナで作成されたフォームで、プログレスバーとキャンセルボタン、さらにメッセージを表示するラベルが配置されており、進行状況ダイアログとして表示されるものですが、このフォームのShowDialogメソッドでダイアログを表示されるのではなく、ProgressDialogクラスを使って進行状況ダイアログを表示、操作します。.NETのマルチスレッドプログラミングについて、ここでは一切説明しません。これらについて詳しくは、このメールマガジンの第19号から第26号等を参考にしてください。Translator」を使って変換し、修正を加えたものです。C#のvolatileにあたる処理は省略しています。呼び出しの後に初期化を追加します。オーバーライドします。