Laden...

Console: Verwendung der ProgessBar

Erstellt von Subix vor 7 Jahren Letzter Beitrag vor 7 Jahren 1.244 Views
S
Subix Themenstarter:in
12 Beiträge seit 2016
vor 7 Jahren
Console: Verwendung der ProgessBar

Hallo,

ich möchte in mein Programm diese Progressbar einbauen.

Das habe ich auch soweit getan und wie es im Beispiel steht angewendet.
Sie soll bei mir aber nicht einfach nur hochzählen sondern den Fortschritt eines Kopiervorgangs ausgeben.

Die Report-Funktion verstehe ich nicht so ganz. Sie schreibt in meiner Console rum bevor Sie überhaupt aufgerufen wird.

Kann man das auch irgendwie anders ausgeben? z.B. mit Console.Write();

Anbei mal ein Codeschnipsel meiner Funktion:


string file = z.Substring(source.Length + 1);
                    string destination = dest + file;
                    try
                    {
                        using (var progress = new ProgressBar())
                        {
                            
                            while (source.Length > destination.Length)
                            {
                                File.Copy(Path.Combine(source, file), Path.Combine(dest, file), false);
                                progress.Report((double)(dest.Length * 100) / (double)source.Length);
                                Thread.Sleep(20);
                            }
                        }
                        
                    }
                    catch (IOException io)
                    {
                        me.SchreibeError(io.Message);
                    }

Über hilfreiche Tipps wäre ich sehr erfreut

Grüße Subix

Hier mal ein Bild anbeiwie das auf der Console aussieht.

Bei Verbindung wurde hergestellt soll dieser Text nicht stehen!
Wie man auch sieht steht in einigen Zeilen am anfang ein Zeichen, auch dieses kommt von der Funktion.

Die 0% stehen immer da. Es verändert sich kein Wert.

Da die Funktion Copy keinen Wert zurück gibt, z.B. wie viele Bytes bereits kopiert wurden, wüsste ich nicht wie man die Funktion anwendet. Ist es überhaupt möglich? 😁

3.170 Beiträge seit 2006
vor 7 Jahren

Hallo,

Dein Code innerhalb des using-Blocks ergibt überhaupt keinen Sinn:

                            while (source.Length > destination.Length)
                            {
                                File.Copy(Path.Combine(source, file), Path.Combine(dest, file), false);
                                progress.Report((double)(dest.Length * 100) / (double)source.Length);
                                Thread.Sleep(20);
                            }

schon die while-Schleife verstehe ich nicht. Du kopierst nur dann, wenn der Pfad zur Ausgabedatei inklusive Dateinamen kürzer ist als der der Originaldatei ohne Dateinamen... naja, kann ja sein, dass Du das so willst.

Dann aber: progress.Report((double)(dest.Length * 100) / (double)source.Length);
Mach Dir mal klar was da passiert. Du multiplizierst die Länge des Zielpfades(!!!) mit 100 und teilst dann durch durch die Länge des Quellfades. Das ist bestimmt nicht das, was Du willst. Beachte vor allemn auch, dass die benutzte Klasse für den Progress keinen Prozentwert haben will, sondern einen Wer zwischen 0 und 1, wobei die 1 dann 100% entspricht.

Überleg Dir nochmal genau, was dein Code tun soll und versuche es nochmal von vorn. Wenn es dann Probleme gibt, kannst Du gerne hier nochmal nachfragen.

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca