Berechnung des Fortschrittsprozentsatzes

7

Ich verwende den Webclient, um eine Datei herunterzuladen. Ich berechne den Fortschrittsprozentsatz wie folgt

  1. Ich kenne die Dateigröße (ich lese es aus der Datenbanktabelle) der Datei, die heruntergeladen werden soll.

  2. Ich bin von der Eigenschaft BytesRecieved des WebClient abhängig, um die Gesamtzahl der während des Downloads abgerufenen Bytes zu kennen.

  3. Der von mir verwendete Algorithmus ist double dProgress = (e.BytesReceived / FileSize)*100); , um den Fortschrittsprozentsatz zu berechnen.

Ich bekomme jedoch keinen korrekten Fortschritts-Prozentsatz, um den Fortschrittsbalken zu aktualisieren.

Gibt es eine Methode, um den Fortschrittsprozentsatz zu berechnen?

    
logeeks 27.08.2011, 21:15
quelle

6 Antworten

17

Sehen Sie sich die folgende Zeile an: double dProgress = (e.BytesReceived / FileSize)*100)

Wenn sowohl e.BytesReceived als auch FileSize ganze Zahlen sind, haben Sie immer 0 * 100 = 0 .

Machen Sie etwas wie folgt:

double dProgress = ((double)e.BytesReceived / FileSize)*100.0

Dies liegt daran, dass / eine ganzzahlige Division hat, wenn zwei Ganzzahlen geteilt werden. Aber das willst du nicht. Sie konvertieren also eine der Variablen in double .

    
Petar Minchev 27.08.2011, 21:19
quelle
3

Wenn Sie bei einem asynchronen Download das DownloadProgressChanged -Ereignis verarbeiten, enthält der Ereignisarg bereits eine ProgressPercentage , so dass es keinen Sinn macht, sie neu zu erfinden. Ein künstliches Beispiel:

%Vor%     
vcsjones 27.08.2011 21:25
quelle
1

BytesReceived und FileSize sind wahrscheinlich Ganzzahlen, daher müssen Sie den Fortschritt auf diese Weise berechnen:

%Vor%     
Andrey Kamaev 27.08.2011 21:21
quelle
1

Das Problem ist, dass beide Zahlen ganze Zahlen sind. Wenn du sie aufteilst, werden sie kleiner als 1, also runden sie auf 0 ab. Typifiziere sie, um das Ergebnis zu einem Float zu machen:

%Vor%     
GolezTrol 27.08.2011 21:22
quelle
1

Dies ist ein sehr kniffliges Problem mit Grundrechenarten und Casting in C #.

Lösung

Speichern Sie zuerst das Ergebnis der Ganzzahldivision in einer Doppelvariablen. Und tippe dann cast in eine Ganzzahl.

%Vor%

Zu beachtende Punkte

Stellt fest, dass x / y = 0 für alle Werte von x und y, solange sie Ganzzahlen sind Wir können dies nicht in einer Zeile durch irgendwelche Casting-Kombinationen lösen

    
Sunil Purushothaman 16.07.2014 10:27
quelle
0

Versuchen Sie Folgendes:

%Vor%

...

%Vor%

Oder verwenden Sie einfach den Wert ProgressPercentage .

%Vor%     
Kakashi 27.08.2011 21:27
quelle

Tags und Links