Backgroundworker + Progressbar + Events = Problem

ForceDragonX

Grünschnabel
Seltsamer Titel, das gebe ich zu :rolleyes:

Jedenfalls will ich mithilfe der SharpZipLib einen Ordner samt Unterordner in ein Zip-Archiv packen. Die Methode habe ich auch schon gefunden und so umgestellt, dass ein Backgroundworker sie ausführt. (Leider fällt mir gerade der Name des Users ein...)
Ich erwarte jetzt keinen kompletten Quellcode (was aber trotzdem nett wäre ^^).
Jedenfalls ist das der aktuelle Code:
Code:
        private string parentPath;

        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            ZipOutputStream s = new ZipOutputStream(File.Create(textBox1.Text + "Backup.zip"));
            s.SetLevel(1);
            DirectoryInfo maindir = new DirectoryInfo(Directory.GetDirectoryRoot(Application.StartupPath));
            parentPath = maindir.ToString();

            GoSubdirs(ref s, Directory.GetDirectoryRoot(Application.StartupPath));

            s.Close();
        }

        private void GoSubdirs(ref ZipOutputStream s, string path)
        {
            DirectoryInfo dir = new DirectoryInfo(path);
            foreach (DirectoryInfo subdir in dir.GetDirectories())
            {
                GoSubdirs(ref s, subdir.FullName);
            }
            foreach (FileInfo fi in dir.GetFiles())
            {
                FileStream fs = File.OpenRead(fi.FullName);

                byte[] buffer = new byte[fs.Length];
                fs.Read(buffer, 0, buffer.Length);
                ZipEntry entry = new ZipEntry(dir.FullName.Replace(parentPath, "") + "/" + fi.Name);
                entry.Size = fs.Length;
                fs.Close();
                s.PutNextEntry(entry);
                s.Write(buffer, 0, buffer.Length);
            }
        }

        private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            progressBar2.Value = e.ProgressPercentage;
        }

Nun sollte die Progressbar natürlich den Fortschritt anzeigen - was sie aber nicht macht, was wahrscheinlich an diesem Teil liegt:
Code:
        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            [...]

            GoSubdirs(ref s, Directory.GetDirectoryRoot(Application.StartupPath));

            [...]
        }

        private void GoSubdirs(ref ZipOutputStream s, string path)
        {
            [...]
        }

Ich habe jetzt schon verschiedene Lösungen durchgeschaut, aber keine hat mir wirklich geholfen.
Weist mich jetzt bitte nicht auf :google: oder die Forumsuche hin, da habe ich geschaut.

Bitte helft mir :confused:

EDIT: Sorry, ich hab vergessen zu sagen, welches Programm ich verwende.
Ich benutze Microsoft Visual C# 2008 Express Edition.
Der Code hier darf sich nur auf .NET 2.0 beziehen (--> kein WPF)

Und der Autor des oben angesprochenen Codes ist der Admin 'Alexander Schuc'.



MfG FDX
 
Zuletzt bearbeitet:
Du musst natürlich selbst auslösen dass sich der Prozentsatz des Prozesses geändert hat. BackgroundWorker.ReportProgress(Prozent);
 
Zurück