我有一個C#窗體窗體應用程序,我扔在一起。這是相當簡單:\C#更新並使用backgroundworker進程追加文本框的值
輸入:
- 文本字符串
- 源文件夾路徑
- 目標文件夾路徑
- 整數通過在文本文件數
該應用程序的搜索輸入的文本字符串的源文件夾;如果它找到該字符串,則會將該文件和一個具有相同名稱的圖像文件複製到目標文件夾。它根據整數輸入無論如何都要這麼做。
所以我有一個按鈕,在按鈕單擊事件我打電話
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線程分開運行。也許我已經完成了這個複雜的工作......有人能把我推向正確的方向嗎?謝謝!
的OP已經在正確的軌道,這是使用BackgroundWorker的,它們都創建後臺線程上(當然,它使用了池線程),並處理您在最後一段中提到的一些問題。 – 2010-07-21 20:01:25
當文件處理正在進行時,OP沒有指出用戶在UI中還有其他事情要做,因此後臺線程可能會導致IMO過度使用。 – dthorpe 2010-07-21 20:48:21