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();
}
それで、私がしたことは必要ですか?多分何か他のものが良かったですか?