C#: Progressbar optisches "refreshen" erzwingen

Gast #541345
Lesenswert?

Hallo!

In einer Schleife wird eine Datei (einige MByte) Zeilenweise gelesen, 
bearbeitet und wieder abgespeichert. Dazu wollte ich einen 
Fortschrittsbalken einblenden.

Um Performance nicht zu bremsen reicht das alle 5% locker aus. Trotz 
nachfolgendem Codeausschnitt wird der Balken oftmals nur selten 
aktualisiert. Wie kann ich meinem Wunsch denn gegenüber .NET2.0/Windows 
mehr Nachdruck verleihen?
1
void lange_Dateiarbeit()
2
{
3
   ...//hier: Zeilenweise_Dateilesen_bearbeiten_abspeichern();
4
   Prozent = (int)((100 * GeleseneZeichen) / Filelength);
5
   if (0 == (Progress % 5))
6
   {
7
      progressBar.Value = Prozent;
8
      progressBar.Refresh();    //Tuts eher zufällig bis seeehr verzögert
9
   }
10
}
Gast #1133886
Lesenswert?

// Ich weiß, das der Beitrag schon seehr lange her ist, aber:

Du berechnest:
   Prozent = (int)((100 * GeleseneZeichen) / Filelength);

Ist die Berechnung nicht aber (Mathematisch): p = (W/G) * 100
Also:
   Prozent = (int)((GeleseneZeichen / Filelength) * 100);


Ist mir jetzt nur so aufgefallen.
Grüße,
JasonDelife.
#1133912
Lesenswert?

Die Chancen das sowohl GeleseneZeichen als auch Filelength als Integer 
Datentyp definiert sind, sind in diesem Beispiel ziemlich hoch.
Da GeleseneZeichen aber aller Wahrscheinlichkeit nach, nicht größer als 
Filelength werden kann, ist das Ergebnis der Division GeleseneZeichen / 
Filelength damit immer 0, bzw. 1 wenn GeleseneZeichen == Filelength

Mathematisch gesehen sind die Ausdrücke

((100 * GeleseneZeichen) / Filelength)

und

((GeleseneZeichen / Filelength) * 100)

allerdings völlig gleichwertig.
Im Computer leider nicht.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren