Ladefortschritt des Programmstarts

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von 4typen.

    Ich hab nicht viel Ahnung von Backgroundworkern. Aber könnte man das Form_Load nicht in einem BGW ausführen und dann im ProgressChanged (so heisst das Event doch, oder?) Event den Fortschritt auf eine PRogressbar übertragen?

    Skybird schrieb:

    Das sind ja Ubisoftmethoden hier !

    tuts das nich ? die % zahl verändert sich wenn der weiter läd soweit ich das richtig kappiert hab


    Bekomm den Link der Progressbar jetz nich da kopier ichs raus :





    12.15 Fortschrittsbalken (ProgressBar)





    Manchmal führen Anwendungen eine länger dauernde Aufgabe durch, z. B. das Kopieren von Dateien, das Herunterladen von Dateien aus dem Internet oder eine länger dauernde Rechenoperation – Vorgänge, die dem Anwender Geduld abverlangen.

    Ein Programm, das eine länger andauernde Aufgabe ausführt, sollte den Benutzer davon in Kenntnis setzen, damit dieser nicht denkt, die Anwendung reagiere nicht mehr. Man kann das dadurch erreichen, dass man für die Dauer der Ausführung den Mauszeiger als Sanduhr darstellt. Das ist ein erster Ansatz, um auf die Hintergrundtätigkeit der Anwendung aufmerksam zu machen. Wie lange diese andauern wird, kann der Anwender jedoch nicht im Geringsten abschätzen. Jetzt schlägt die Stunde des ProgressBar-Steuerelements, das dem Anwender über einen Fortschrittsbalken den Stand der Operation rückmeldet.

    Die Programmierung dieses Steuerelements ähnelt den zuvor behandelten Bildlaufleisten. Zur Entwicklungszeit legen Sie die Eigenschaften Maximum und Minimum fest, zur Laufzeit ermitteln Sie aus dem aktuellen Stand der Operation den Wert der Eigenschaft Value. Entweder weisen Sie der Eigenschaft einen Wert zu oder rufen die Methode PerformStep auf, um die aktuelle Position der Statusanzeige zu erhöhen. Die Schrittweite wird durch die Eigenschaft Step vorgegeben.

    Mit der Eigenschaft Style können Sie den Anzeigestil des Fortschrittsbalkens festlegen. Dazu gibt es drei Einstellmöglichkeiten, die Sie der Tabelle 12.16 entnehmen können.


    Tabelle 12.16 Die Enumeration »ProgressBarStyle«
    Konstante Anzeige im Steuerelement
    Blocks
    Steigende Anzahl unterteilter Blöcke

    Continuous
    Ein durchgehender Balken

    Marquee
    Blöcke, die wie eine Laufschrift den Anzeigebereich durchlaufen



    Für die Einstellung ProgressBarStyle.Marquee kontrolliert die Eigenschaft MarqueeAnimationSpeed, wie schnell die Laufbalken durch den Anzeigebereich laufen. Die Angabe erfolgt in Millisekunden.

    Beispielprogramm
    Im folgenden Beispielprogramm wird eine Datei geöffnet und deren Inhalt in einer Textbox ausgegeben. Da der Ladevorgang eine längere Zeit in Anspruch nimmt, wird der Ladestatus in einem ProgressBar-Steuerelement angezeigt (siehe Abbildung 12.31).

    Zu Demonstrationszwecken erzeugen wir im Folgenden eine Datei, während die Form geladen wird. Dabei wird in einer Schleife 20001-mal ein Zeichen in die Datei geschrieben, jeweils ein Buchstabe des Alphabets.


    '...\WinControls\Dialoge\Fortschritt.vb



    VB.NET-Quellcode

    1. Public Class Fortschritt
    2. Private file As String = IO.Path.Combine( _
    3. Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), _
    4. "TestFortschritt.txt")
    5. Private Sub Laden(ByVal sender As Object, ByVal e As EventArgs) _
    6. Handles MyBase.Load
    7. ' Datei erzeugen und mit Zeichen füllen
    8. Dim fs As IO.FileStream = IO.File.Open(file, IO.FileMode.Create)
    9. For i As Integer = 0 To 20000 : fs.WriteByte((i Mod 26) + 97) : Next
    10. fs.Close()
    11. End Sub
    12. Private Sub Aktion(ByVal sender As Object, ByVal e As EventArgs) _
    13. Handles Füllen.Click
    14. Me.Cursor = Cursors.WaitCursor
    15. Textfenster.Clear()
    16. Textfenster.Refresh()
    17. ' Fortschrittsbalken einstellen
    18. Fortschrittsbalken.Maximum = (New IO.FileInfo(file)).Length
    19. Fortschrittsbalken.Step = 1
    20. Fortschrittsbalken.Value = 0
    21. ' Datei einlesen und Fortschrittsbalken aktualisieren
    22. Dim text As String = ""
    23. Dim fs As IO.FileStream = IO.File.Open(file, IO.FileMode.Open)
    24. While True
    25. Dim var As Integer = fs.ReadByte()
    26. If var = –1 Then Exit While 'Dateiende
    27. text += Convert.ToChar(var)
    28. Fortschrittsbalken.PerformStep()
    29. End While
    30. fs.Close()
    31. Textfenster.Text = text
    32. Me.Cursor = Cursors.Default
    33. End Sub
    34. Private Sub Ende(ByVal sender As Object, ByVal e As FormClosedEventArgs) _
    35. Handles MyBase.FormClosed
    36. IO.File.Delete(file)
    37. End Sub
    38. End Class


    Im Ereignishandler des Click-Ereignisses der Schaltfläche wird – nachdem ein Wartecursor gesetzt und die Textbox mit einem Objekt von Typ FileInfo geleert wurde – die Größe der einzulesenden Datei ermittelt, um die Eigenschaft Maximum des ProgressBar-Steuerelements zu setzen. Als Schrittweite des Fortschrittsbalkens wird der Wert 1 festgelegt.

    Zum Einlesen wird ein Objekt vom Typ FileStream verwendet, das in einer Schleife die Datei byteweise mit ReadByte einliest und nach jedem gelesenen Byte den Fortschrittsbalken aktualisiert. Sind alle Daten eingelesen, wird die Schleife beendet, der Dateistrom geschlossen und der Inhalt der Datei, der sich in der Variablen text angesammelt hat, in der Textbox angezeigt. Ich habe bewusst auf einen StringBuilder verzichtet, um das Programm etwas auszubremsen. Zum Schluss wird der Mauscursor wiederhergestellt.

    Beim Schließen der Form wird die erstellte Datei gelöscht.



    QUELLE: galileocomputing.de
    Man kann natürlich die einzelnen Ladevorgänge aufteilen, so ist es bei Gimp auch gemacht worden (z.B. eine Einheit für GUI laden, eine Einheit für Effekte laden, eine Einheit zum erstellen des Startbildes, ...). Du erstellst eine Form als Ladeform und haust da eine Progressbar drauf. Dann legst du diese als Startform fest. Jetzt schreibst du ins Shown-Event des Splashscreens einfach

    VB.NET-Quellcode

    1. Form1.Show ' oder eben die andere form

    Jetzt wechselst du in Form_Load deiner Hauptform. Du könntest bei den Hauptladepunkten (die am längsten brauchen) immer +1 nehmen:

    VB.NET-Quellcode

    1. SplasScreen.ProgressBar1.Value+=1

    Und wenn du alles fertig hast schließt du den Ladescreen (Splashscreen) wieder. Natürlich muss das Maximum richtig eingestellt sein.