時間が掛かる処理では進行況を表示して、かつ、処理を中断できるようにしたほうがいい。
以下、進行状況ダイアログを表示するサンプル。これをたたき台にして、ダイアログに進行状況を示すメッセージやプログレスバーなどを追加しよう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
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; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
public partial class FormProgress : Form { public FormProgress() { InitializeComponent(); } public bool aborted = false; private void btnAbort_Click(object sender, EventArgs e) { aborted = true; } } |