端くれプログラマの備忘録 C# [C#] 時間が掛かる処理で進行状況を表示する

[C#] 時間が掛かる処理で進行状況を表示する

時間が掛かる処理では進行況を表示して、かつ、処理を中断できるようにしたほうがいい。

以下、進行状況ダイアログを表示するサンプル。これをたたき台にして、ダイアログに進行状況を示すメッセージやプログレスバーなどを追加しよう。

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;
    }
}

progress_dialog