時間が掛かる処理では進行況を表示して、かつ、処理を中断できるようにしたほうがいい。
以下、進行状況ダイアログを表示するサンプル。これをたたき台にして、ダイアログに進行状況を示すメッセージやプログレスバーなどを追加しよう。
public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { this.Enabled = false; using (FormProgress form = new FormProgress()) { form.Show(); for (int i = 0; i < 100; i++) { // 時間が掛かる処理 System.Threading.Thread.Sleep(100); // メッセージキューを処理 Application.DoEvents(); // 中断ボタンが押されたらループ離脱 if (form.aborted) break; } } this.Enabled = true; } }
public partial class FormProgress : Form { public FormProgress() { InitializeComponent(); } public bool aborted = false; private void btnAbort_Click(object sender, EventArgs e) { aborted = true; } }