我有一个用C#编写的窗体应用程序,非常简单:
输入:
- 文本字符串
- 源文件夹路径
- 目标文件夹路径
- 整数计数
该应用程序在源文件夹中搜索包含输入的文本字符串的文本文件;如果找到该字符串,则将该文件和同名的图像文件复制到目标文件夹中。这将根据整数输入重复执行多少次。
所以我有一个按钮,在按钮点击事件中调用:
ProcessImages(tbDID.Text, tbSource.Text, tbDest.Text, comboBoxNumberImages.SelectedItem.ToString());
这是:
private void ProcessImages(string DID, string SourceFolder, string DestFolder, string strNumImages)
{
int ImageCounter = 0;
int MaxImages = Convert.ToInt32(strNumImages);
DirectoryInfo di = new DirectoryInfo(SourceFolder);
foreach (FileInfo fi in di.GetFiles("*.txt"))
{
if (fi.OpenText().ReadToEnd().Contains(DID))
{
//found one!
FileInfo fi2 = new FileInfo(fi.FullName.Replace(".txt", ".tif"));
if (fi2.Exists)
{
try
{
tbOutput.Text += "Copying " + fi2.FullName + " to " + tbDest.Text + "\r\n";
fi2.CopyTo(tbDest.Text + @"\" + fi2.Name, true);
tbOutput.Text += "Copying " + fi.FullName + " to " + tbDest.Text + "\r\n";
fi.CopyTo(tbDest.Text + @"\" + fi.Name, true);
ImageCounter++;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
if (ImageCounter >= MaxImages)
break;
}
}
我的程序运行良好,但我想在文件复制时更新表单中的文本框以显示进度。基本上,在运行过程中窗体会变成空白,完成后输出会出现在文本框中。我希望实现一个BackgroundWorker来更新运行时的UI。
我已经查看了一些示例,但是并没有真正理解它们。我没有完成百分比的值,我只想在每次迭代时更新.Text并将其显示出来。我甚至认为我不需要将实际的复制操作放在不同的线程中,只是听起来它需要从主UI线程中单独运行。也许我总体上过于复杂化了这个问题...能否有人指导我正确的方向?谢谢!