Visual Basic Progressbar mit For Schleife überspringt immer 10 &?

Der Code  - (Visual Basic, vb)

2 Antworten

Versuche es mal damit:

For i as integer = 1 to 10
       ProgressBar1.value = i * 10
       Label1.Text = Str(Int(i * 10)) + "%"
       Application.DoEvents()
       System.Threading.Thread.sleep(100)
Next

Lg Tzorp

Zuerst zu deinem Problem: Application.DoEvents steht an der falschen Stelle. Wenn dich die Erklärung für das Verhalten interessiert, dann lies weiter, ansonsten springe zum nächsten Absatz nach der Liste. Schritt für Schritt sieht der Ablauf so aus:

  • Erster Durchlauf: Du setzt den Wert auf 10 und weist diesen Wert dem Label zu. Das Label hat nun von Windows eine Anforderung zum Neuzeichnen erhalten und wird diese ausführen, sobald die MessageQueue verarbeitet wird. (Das passiert noch nicht, weil der aktuelle Thread noch in der For-Schleife arbeitet.)
  • Im zweiten Durchlauf setzt du den Wert auf 10 und erlaubst die Abarbeitung der MessageQueue durch Application.DoEvents. Das Label darf nun seinen Inhalt aktualisieren und zeigt den Wert 10 an. Erst dann weist du dem Label den neuen Wert 20 zu. Gleiches Spiel: die Anforderung zum Neuzeichnen landet in der MessageQueue und wird bei der nächsten Abarbeitung ausgeführt. Aber auch das passiert erst im nächsten Durchlauf.
  • Im vorletzten Durchlauf ist der Wert der ProgressBar 90 und das Label darf dann erst seine 80 aus der vorherigen Anforderung zeichnen.
  • Im letzten Durchlauf passiert das gleiche. Allerdings ist der Thread danach frei (kein Thread.Sleep) und kann sofort die MessageQueue erneut abarbeiten und somit die 100 anzeigen. Die 90 wird also vorher angezeigt, aber nur für den Bruchteil einer Sekunde (wenn überhaupt).

Wenn du Application.DoEvents nach der Wertzuweisung des Labels schreibst, funktioniert es wie gewollt.

Nun zum anderen Problem: Nichts ist nerviger als ein simulierter Fortschritt. Eine ProgressBar, die ihren Wert in Abhängigkeit einer (zur Entwurfszeit) definierten Zeit verändert hält den gesamten Programmablauf auf und hat ohne Multithreading wenig Sinn.

Excel (Makro?) Datensätze zusammenfassen / Durchschnittswert?

Hallo !

Ich habe folgende Herausvorderung:

Mein Klimalogger speichert alle 15 min einen Datensatz ab (Temperatur und Luftfeuchtigkeit), ein Export der Daten hat eine CSV von 40.000 Zeilen ergeben (logischerweise, läuft ja schon über ein Jahr)

Jetzt möchte ich möglichst komfortabel von jedem Tag den durchschnittlichen temp Wert ermitteln und auf einem gesonderten Tabellenblatt ablegen.

Kann mir jemand mal einen Hinweis oder Beispiel basteln wie sowas funktionieren kann ?

...zur Frage

Visual Studio debug healthmon.exe?

Hey, seit ich Visual Studio habe, kommt alle ca. 3-20 Minuten (Jaaa, ich habe kein Zeitgeühl...) Die Meldung Debug healthmon.exe, ich habe schonmal versucht auf Debug healthmon.exe zu drücken, aber dann kommt ein Dialogfenster mit dem ich nichts anfangen kann, daher drücke ich immer auf cancel debugging...

Die Meldung kommt auch, wenn das Programm geschlossen ist.

Ich benutze Visual Studio 2015. Die Kostenlose Variante...

Deinstallieren will ich es auch nicht, da ich es brauche, ich habe auch schonmal im Task Manager unter Prozesse nach healthmon.exe oder healthmon gesucht, dort gibt es aber auch nichts. Bei DuckDuckGo und Google bin ich auch nicht fündig geworden...

...zur Frage

Visual Basic Taschenrechner Prozent taste machen?

Könnt ihr mir sagen, wie ich prozent auf einem taschenrechner mache? wenn ich z.b. 8 * 9% rechne ist es ja das selbe wie 8 * (9 *0.01), aber wie machen ich das? :D

...zur Frage

Visual Basic TCP / Prozess mit Netzwerk Aktivitäten

Hallo zusammen,

ich suche nach einem Weg die TCP verbindungen eines bestimmten Ports (oder auch eines Prozesses) zu zählen.

Also z.b. wie beim Ressourcen Monitor, dann wähle ich den Prozess aus und sehe bei den TCP Connections die aktiven Verbindungen.

Diese möchte ich in einer Liste haben bzw optimal wäre, wenn ich diese zählen könnte und dann in einem Label ausgeben könnte.

Z.b. in einem Timer der jede Minute Label1 aktualisiert mit tcpConnections.Count() oder so eine Fantasie sache.

Ich finde zu dem Thema einfach nichts im Netz und hoffe, mir kann jemand helfen. Optimal wäre ein source code und eine kurze erklärung zu relevanten Funktionen. & Falls es nicht möglich ist, gibt es eine, für meine Lage, gute ausweichmöglichkeit?

Noch zur Info:

Ich habe das Programm schon in Visual Basic stehen und möchte jetzt auch nicht von neu anfangen in einer anderen Programmiersprache.

Danke :)

...zur Frage

Visual Basic Label-Farbe ändern bei If-Befehl - geht das?

Hallo, Ich würde gerne mit Visual Basic eine Art Vergleich zwischen mehreren Handys machen. Ich stelle mir das ganze so vor, dass ich in zwei Combo-Boxen die Handys aufgelistet habe und darunter Labels mit den Vergleichskategorien (Android-Version, Prozessor, Akku etc.). Jetzt meine eigentliche Frage: kann ich das so machen, dass wenn z.B. der Akku bei Handy 1 besser ist als bei Handy 2, das entsprechende Label z.B. grün färben? Und wenn ja, wie geht das? Eine einfache Erklärung wäre nett, ich kenne mich zwar etwas mit VB aus, aber bin bei weitem kein Experte.

Danke schonmal für eure Hilfe :)

...zur Frage

[Bootstrap, Javascript, JQuery] Langsam füllende Progress Bar?

Hallo Leute, ich habe gerade eine Frage zur Bootstrap Progress Bar: Wie bekomme ich es mit Javascript/JQuery hin, dass sich die Progress Bar beim öffnen der Seite in ca. 2 Sekunden von 0% auf 100% auffüllt?

Vielen Dank für eure Hilfe

...zur Frage

Was möchtest Du wissen?