我試圖讓我的腦袋圍繞backgroundworker和進度條,到目前爲止我已經得到它的工作,但不完全如何我想它的工作。基本上我排序/重命名文件夾,並將它們複製到不同的位置,這個工作和代碼是自我解釋,輸出文件夾生成是預期的。然而,對於我打算通過搜索的每個文件夾,我必須右鍵單擊它以獲取文件數量,然後在代碼中,我必須將progressBar1.Maximum設置爲該值,以便顯示進度條的coreect進度。怎麼可能讓它自動設置文件的數量,因爲它無論如何都會經過每個文件夾?一些文件夾有成千上萬的文件,其他文件有數百萬除此之外,我想添加一個標籤,以便它顯示正在處理的文件的名稱以及進度條更新。BackgroundWorker&Progressbar問題c#Visual Studio 2010
namespace Data_Sorter
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnSelect_Click(object sender, EventArgs e)
{
folderBrowserDialog1.ShowDialog();
tbFilePath.Text = folderBrowserDialog1.SelectedPath.ToString();
}
private void btnSort_Click(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
int totalFiles = 0;
foreach (var file in Directory.GetFiles(tbFilePath.Text, "*.txt", SearchOption.AllDirectories))
{
backgroundWorker1.ReportProgress(totalFiles);
string fullFilename = file.ToString();
string[] pathParts = fullFilename.Split('\\');
string date = pathParts[6];
string fileName = pathParts[7];
string[] partName = fileName.Split('_');
string point = partName[3];
Directory.CreateDirectory("Data Sorted Logs\\" + point + "\\" + date + "\\");
if (Directory.Exists(("Data Sorted Logs\\" + point + "\\" + date + "\\")))
{
string destPath = (point + "\\" + date + "\\");
File.Copy(fullFilename, "C:\\Documents and Settings\\PC\\Desktop\\Sorter\\Data Sorter\\bin\\Debug\\Data Sorted Logs\\" + destPath + fileName); }
else
{
MessageBox.Show("destination folder not found " + date + point);
}
totalFiles++;
}
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
MessageBox.Show("Done");
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Maximum = 6777; // set this value at the maximum number of files you want to sort //
progressBar1.Value = e.ProgressPercentage;
}
}
這個完美的作品,我不得不更改公式表達我* 200/totalFiles因爲進度條會在中間點正好停在操作完成。我學到了很多謝謝.... – Rg786
太好了,很高興幫助!我看到循環的最後一條指令是totalFiles ++,您必須將其刪除,因爲它不是必需的,並且會破壞公式((i * 100)/ totalFiles)的含義。這就是爲什麼你必須改變100到200.希望它是明確的。 –