0

以下に、アプリケーションのインポート機能用のディレクトリをコピーするためのコードを示します。プログレスバーとラベルを適切に更新したいと考えています。バックグラウンド ワーカーについて調べたところ、この特定のケースにも適していることがわかりました。コードは次のとおりです。

private void importToolStripMenuItem_Click(object sender, EventArgs e)
    {
        lbProcessFiles.Visible = false;
        pbProcessFiles.Visible = false;

        DialogResult result = folderBrowserDialog1.ShowDialog();
        if (result == DialogResult.OK)
        {
            string sourcePath = folderBrowserDialog1.SelectedPath;
            string destinationPath = @"Logs\\";

            //Now Create all of the directories
            foreach (string dirPath in Directory.GetDirectories(sourcePath, "*", SearchOption.AllDirectories))
            {
                lbProcessFiles.Visible = true;
                lbProcessFiles.Text = "Copying Directories";
                pbProcessFiles.Value = 0;
                pbProcessFiles.Maximum = dirPath.Length;

                Directory.CreateDirectory(dirPath.Replace(sourcePath, destinationPath));

                pbProcessFiles.PerformStep();
            }

            lbProcessFiles.Text = "Now Copying Files";

            //Copy all the files
            foreach (string newPath in Directory.GetFiles(sourcePath, "*.*", SearchOption.AllDirectories))
            {
                pbProcessFiles.Value = 0;
                pbProcessFiles.Maximum = newPath.Length;
                lbProcessFiles.Text = "Copying Files";

                File.Copy(newPath, newPath.Replace(sourcePath, destinationPath));

                pbProcessFiles.PerformStep();
            }                    
        }
        lbProcessFiles.Text = " Import Complete";
    }
4

1 に答える 1

1

foreach の各反復でプログレスバーの値をゼロに設定しています。pbProcessFiles.Value = 0;foreach ステートメントの外に移動します...

于 2013-08-02T18:18:30.317 に答える