ProgressBar Flackert immer beim Programm ablauf

Fridulin

Erfahrenes Mitglied
Hallo Leute,

ich habe eine Progressbar und fülle sie mit mit "pb1.Value = wert;" Es Funktioniert auch sie geht langsam hoch, alles wunderbar nur sie flackert immer, als wenn der Aufruf zu schnell ist und sie immer wieder neu aufgebaut wird. Muß man vielleicht den letzten Wert noch extra abspeichern oder so? Ich habe allerdings auch schon Probiert
Code:
pb1.Value = wert;
pb1.Value = pb1.Minimum;
Allerdings auch ohne erfolg. Alles ist in einer While Schleife in einem Tread.

Code:
while (s_length > s_read)
{
pb1.Value = b;
byte[] buffer = new byte[1024];
int read = reader.Read(buffer, 0, 1024);
s_read += read;
sendBuffer(stream, buffer, read);
int pc = (int) ((((double)s_read) / ((double)s_length)) * 100);
tb1.Text = pc + "% Gesendet!";
if (pc > pcalt)
{
pb1.Value = pc;
}
pb1.Value = pb1.Minimum;
}

Hat jemand von euch vielleicht einen Rat?

Vielen Dank und Viele Grüße
Fridulin
 
Hallo Fridulin,

ich komme zwar eher aus der VB.NET Ecke aber es sieht so aus
als ob du am Ende jedes Schleifendurchlaufes mit
pb1.Value = pb1.Minimum;
die Progressbar immer wieder zurück auf Minimum setzt.
Ich glaube das "pb1.Value = pb1.Minimum;" muss hinter
das letzte } und somit ausserhalb der Schleife sein.
Das könnte durchaus der Grund für das Flackern sein.

Jens
 
Hi,

vielen Dank für deine schnelle Antwort. Hast Recht das währe eine Möglichkeit gewesen, habe ich auch eben getestet nur leider flackert die ProgressBar immer noch. Also es wird wohl nicht auf Minimum zurück gesetzt, denn egal ob ich das nun drin habe oder nicht, es ändert nichts.

Code:
pb1.Value = pb1.Minimum;

Vielleicht hast du, oder jemand anderes ja noch eine Idee was es sein könnte?

Grüße und vielen Dank noch einmal
Fridulin
 
Hi!

Das würde mich auch mal brennend interessieren. Ich habe mir aus einer Progressbar ein Füllstandsanzeige gebastelt. Wenn der Füllstand steigt, fängt es auch bei mir an zu flackern.

Gruß
Christoph
 
Hallo Fridulin,

du kannst mal versuchen den Wert
pb1.Value = b nicht bei jedem Schleifendurchlauf
zu zuweisen.
Also du nimmst eine Variable die du in der Schleife
erhöhst und wenn die Variable eine Wert von bspw 10
hat (das musst du testen) dann setzt du
pb1.Value = b und setzt die Variable auf 0.

Hier mal ein VB Bsp.

Code:
  Dim i , j as Integer

  For i = 1 to 1000

    j = j + 1

    If j = 10 then
      j = 0
      pb1.Value = b
    End If

  Next i


Jens
 
Hi,

danke für deine Antwort, also jetzt bin ich wirklich überfragt. Ich habe deinen Rat befolgt und habe nur bei 10 wirklich es erhört und es hat schon wieder geflackert. Ich denke das liegt wohl nicht an der ProgressBar sondern wahscheinlich eher an den Thread. Ich habe einen Thread dadrinne läuft die Schleife ab und macht und tut dort noch etwas mehr und eventuell muß ich das mal Probieren dort 2 Threads reinzubringen. Vielliecht klappt es ja dann, daß auch dieser Thread praktisch überlastet ist.


Code:
if (pc == 10)
{
pb1.Value = pc;
pb1.Value = pb1.Minimum;
}


Grüße und vielen Dank nocheinmal
Fridulin
 
Mhh mißt daran lag es auch nicht. Habe wie schon erwähnt einen neuen Thread aufgebacht und damit die PB gefüllt, leider auch ohne erfolg. Sie flackert immernoch.
Was kann das denn nur noch sein?
Hast du, oder jemand anderes eventuell noch eine Idee?

Grüße und Vielen Dank für eure Hilfe
Fridulin


---- Edit ---
Habe jetzt schoneinmal den Grund herausgefunden, er springt aufjendenfall zu oft in der ProgressBar rein und setzt es zu oft. Auch wenn er nur bei z.B. einmal etwas erhören will, macht er es, weil die ganze While schleife zu oft durchläuft bzw. zu shcnell durchläuft, dann bleibt der eine Wert auf 10 aber Sie läuft trotzdem 30 mal oder so durch. Wenn ich nämlich dort eine MessageBox reinsetze wenn er normal die ProgressBar erhöht (also bei 10 z.B.) dann öffnet sie sich mind. 30 mal.
Ich werde es mal probieren mit einer anderen Variable, daß sobald sie einmal gesetzt ist das er nicht noch einmal durchläuft. Mal schaun obs klappt.

Grüße Fridulin
 
Zuletzt bearbeitet:
Also ich habe das jetzt geschafft das er nur einmal in der Schleife geht. Nur das Problem ist immer noch das er immer wieder die Progressbar nach einem druchlauf auf 0 zurück setzt. Liegt es vielleicht doch am Thread, daß wenn er durchgelaufen ist die Form standart einstellungen die ProgressBar wieder auf 0 setzt?
Code:
while 
{
.....
 
if (pc % 10 == 0)
{
if (gesetzt == false)
{
pb1.Value =pc;
MessageBox.Show(pc.ToString());
gesetzt = true;
}
 
}
else {
gesetzt = false;
}
pb1.Value = pb1.Minimum; // egal wo ich das hinsetze, ändert nichts
 
...
}
Ich bitte um Hilfe
Grüße und vielen Dank nocheinmal
 
Fridulin hat gesagt.:
...
pb1.Value = pb1.Minimum; // egal wo ich das hinsetze, ändert nichts
...
Mich würde interessieren, warum du deine ProgressBar immerwieder auf 0 (oder Minimum) zurücksetzt.
So wie es jetzt ist, wird im jedem Schleifendurchlauf der aktuelle Wert gesetzt --> Ansicht springt auf den Wert.
Kurz danach setzt den Wert wieder auf 0 --> Ansicht springt wieder auf Wert.
Dadurch dass du in jedem Durchlauf (übertriebengesagt) Value auf Maximum und anschließend wieder auf Minimum setzt, fängt die Bar an zu flackern.
Wenn du pb1.Value = Minimum weglässt aus der Schliefe (komplett und nicht wieder verschieben) sollte es eigentlich funktionieren.
 
Hi, danke für deine Antwort.
Leider geht es immer noch nicht, auch wenn ich das ganz weglasse. Jetzt da ich den Wert immer nur 1 mal setze, wenn er sich immer bei 10ner Schritten sich erhört wird garnichts mehr angezeigt. Nur wenn ich direkt dahinter eine MessageBox mache um Praktisch die Form kurz anzuhalten, dann sehe ich das der Wert gesetzt wird und auch anzeigt nur irgendwie wird er anscheiend immer wieder auf 0 gesetzt.

Hats du, oder vielleicht ein anderer noch eine Idee warum er den letzten aktuellen Wert nicht Speichert bzw. angezeigt läßt?

Grüße und vielen Dank noch einmal für deine Hilfe
Fridulin
 

Neue Beiträge

Zurück