【发布时间】:2010-07-21 19:15:36
【问题描述】:
我有一个 c# windows 窗体应用程序,我把它放在一起。很简单:\
输入:
- 文本字符串
- 源文件夹路径
- 目标文件夹路径
- 整数计数
应用程序在源文件夹中的文本文件中搜索输入的文本字符串;如果找到该字符串,则将该文件和具有相同名称的图像文件复制到目标文件夹。然而,它会根据整数输入多次执行此操作。
所以我有一个按钮,并在按钮单击事件中调用
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 线程分开运行。也许我把这完全复杂化了……有人能把我推向正确的方向吗?谢谢!
【问题讨论】:
标签: c# backgroundworker