Announcement

Collapse
No announcement yet.

animierter ASCII-Spinner in Statusleiste während Hintergrundprozess

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • animierter ASCII-Spinner in Statusleiste während Hintergrundprozess

    Hallo zusammen,

    in meinem Programm zählt eine Funktion die Anzahl der Zeilen in einer ausgewählten Datei. Da dies bei mehreren Millionen Zeilen schonmal ein Weilchen dauern kann, soll in der Statustuszeile ein Label mit einem rotierenden ASCII-Spinner (zusammengesetzt aus | / - \ usw.) in der Statusleiste anzeigen, dass das Programm noch arbeitet, etwa das da steht "Anzahl Zeilen: zähle... (hier dann das rotierende Teilchen)"
    Hat jemand eine Idee, wie dies am einfachsten zu bewerkstelligen ist?

  • #2
    Hallo,

    lege die 4 benötigten Zeichen in ein String oder Char-Array auf Modul oder Klassenebene an.
    Z. B.: Private Shared ReadOnly _SpinnerItems as String() = {"|", "/", "-", "\"}
    oder in Sub/Function, falls Du Backgroundworker und kein globales Multithreading verwendest:
    Dim aSpinnerItems as String() = {"|", "/", "-", "\"}

    Adressiere das Array mit Zeilenindex Mod 4 beim hochzählen und kombiniere ihn mit Deinem Text
    Alternative: Variable, die bei jedem Vorgang um 1 hochgezählt wird und bei 4 wieder auf 0 gesetzt wird.

    Beim Schreiben in ToolStripStatusLabel muss bei Multithreading jedoch per Invoke erfolgen, sonst erfolgt eine Ausnahme.

    Bei mehreren Millionen Zeilen würde ich sagen, ist Multithreading mit Leistungsüberwachung oder zumindest Backgroundworker ein muss, sonst reagiert das Programm nicht mehr und schreibt auch keine Updates auf das Fenster. Backgroundworker bietet ein paar Funktionen dafür an, wenn ich mich nicht irre. Zumindest für die Progressbar (Marquee-Modus).

    Das sind meine spontanen Gedanken hierzu...
    Schönen Gruß
    Werner

    Comment


    • #3
      Hallo W.P.,
      erstmal vielen Danke für die Antwort. Ich habe es jetzt so gelöst, dass der Spinner sich im eigenen Thread gleich beim Programmstart startet, das Label aber nur während des Zeilenzählens angezeigt wird. Ist vielleicht nicht die eleganteste Lösung aber funktioniert ;-)
      Ich werde deine Version aber dennoch bei Gelegenheit probieren, vielleicht ist sie ja besser :-)

      Comment

      Working...
      X