-1

Add button click eventコードをより整理するために、コード内のコードをコードから分離したいと考えています。これはこれらの変更前の私のコードです (選択しているすべてのファイルがプロセスを開いて、このファイルをリストボックスに追加する前にこれがファイル OK かどうかを確認する必要があるため、GUI がフリーズするのを避けるために BackgroundWorker を使用しています):

private void btnAddfiles_Click(object sender, EventArgs e)
{
    System.IO.Stream stream;

    if (openFileDialog1.ShowDialog() == DialogResult.OK)
    {
        fileSelected();
        if (openFileDialog1.FileNames.Length > 0)
            lastPath = Path.GetDirectoryName(openFileDialog1.FileNames[0]);

        ListboxFile lbf = new ListboxFile();
        lbf.OnFileAddEvent += lbf_OnFileAddEvent;

        BackgroundWorker backgroundWorker = new BackgroundWorker();
        backgroundWorker.WorkerReportsProgress = true;
        backgroundWorker.DoWork +=
        (s3, e3) =>
        {
            foreach (String file in openFileDialog1.FileNames)
            {
                try
                {
                    if ((stream = openFileDialog1.OpenFile()) != null)
                    {
                        int numberOfFiles = openFileDialog1.SafeFileNames.Length;
                        using (stream)
                        {
                            lbf.checkFile(file);
                            lastPath = Path.GetDirectoryName(openFileDialog1.FileNames[0]);
                        }
                    }
                }

                catch (Exception ex)
                {
                    MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
                }
            }
        };

        backgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(
            (s3, e3) =>
            {
                //update my gui
            });

        backgroundWorker.RunWorkerAsync();
    }
}

これは変更後です。

private void btnAddfiles_Click(object sender, EventArgs e)
{
    if (openFileDialog1.ShowDialog() == DialogResult.OK)
    {
        fileSelected();
    }
}

private void fileSelected()
{
    if (openFileDialog1.FileNames.Length > 0)
        lastPath = Path.GetDirectoryName(openFileDialog1.FileNames[0]);

    ListboxFile lbf = new ListboxFile();
    lbf.OnFileAddEvent += lbf_OnFileAddEvent;

    BackgroundWorker backgroundWorker = new BackgroundWorker();
    backgroundWorker.WorkerReportsProgress = true;
    backgroundWorker.DoWork +=
    (s3, e3) =>
    {
        foreach (String file in openFileDialog1.FileNames)
        {
            System.IO.Stream stream;
            try
            {
                if ((stream = openFileDialog1.OpenFile()) != null)
                {
                    int numberOfFiles = openFileDialog1.SafeFileNames.Length;
                    using (stream)
                    {
                        lbf.checkFile(file);
                        lastPath = Path.GetDirectoryName(openFileDialog1.FileNames[0]);
                    }
                }
            }

            catch (Exception ex)
            {
                MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
            }
        }
    };

    backgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(
        (s3, e3) =>
        {
            //update my gui
        });

    backgroundWorker.RunWorkerAsync();
}

それで、私がしたことは必要ですか?多分何か他のものが良かったですか?

4

1 に答える 1