我想将我里面Add button click event
的代码与代码分开,以使我的代码看起来更有条理。这是我在进行这些更改之前的代码(我使用 BackgroundWorker 是为了避免我的 GUI 冻结,因为我选择的每个文件都需要打开进程并检查文件是否正常,然后再将此文件添加到我的列表框中):
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();
}
那么,我所做的有必要吗?也许别的东西更好?