Loading Screen in FormLoad

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Spike.

    Loading Screen in FormLoad

    Hallo zusammen,

    stehe gerade mit Fragezeichen dort, leider hilft mir derzeit auch kein Post in Foren weiter.
    Hier mal kurz mein Anliegen:

    Ich habe ein Form diese geladen wird (nicht die Mainform)
    In dieser Form werden gewisse Daten auf Netzlaufwerkeben geladen.
    Hier wollte ich eine kleines Control anzeigen lassen, bis Form_load bzw. das laden der Dokumente abgeschlossen ist.

    Anfürsich funktioniert es auch schon soweit, leider dreht sich allerdings mein .gif Image nicht, sehr wahrscheinlich weil die GUI es daran hindert.
    So erstmal meine Vermutung.

    In der gewissen Form habe ich folgendes stehen:

    VB.NET-Quellcode

    1. Dim SplashScreenLoading As New Form_Waiting
    2. SplashScreenLoading.TopMost = True
    3. SplashScreenLoading.TopLevel = True
    4. SplashScreenLoading.Show()


    Am Ende des Form_Load dann dieses:

    VB.NET-Quellcode

    1. SplashScreenLoading.Hide()


    Soweit sogut, die Form wird angezeigt, bis alles geladen ist und verschwindet dann wieder.
    Das hinterlegte .gif in der Picturebox1 in der Form_Waiting dreht sich allerdings nicht.

    Ich habe bereits versucht das ganze in einen Backgroundworker auszulagern, auch das ging, aber gedreht hat es sich wieder nicht.

    Wenn ich die Form_Waiting als "Begrüßungsbildschirm" in den Einstellungen festlege funktioniert das drehen des BIlds.

    Hat dort jemand eine Idee, oder bin ich durcheinander?

    In der Form_Waiting, habe ich bereits folgendes probiert:

    VB.NET-Quellcode

    1. Public Class Form_Waiting
    2. Private Sub Form_Waiting_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    3. 'Show animated gif
    4. PictureBox1.Visible = True
    5. ' do heavy work
    6. BackgroundWorker1.RunWorkerAsync()
    7. End Sub
    8. Private Sub BackgroundWorker1_DoWork(sender As System.Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
    9. ' Simulate heavy work load
    10. Threading.Thread.Sleep(5000)
    11. End Sub
    12. Private Sub BackgroundWorker1_RunWorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
    13. ' work done, hide pic box
    14. PictureBox1.Visible = False
    15. End Sub
    16. End Class


    Über Antworten freue ich mich sehr, vielen Dank

    Greez

    Spike schrieb:

    leider dreht sich allerdings mein .gif Image nicht, sehr wahrscheinlich weil die GUI es daran hindert.
    Nee, wahrscheinlicher ist es, dass die schwere Arbeit derdiedas GUI blockiert und somit einfach keine Abarbeitungskapazität für's Gif-animieren da ist. Mach das Netzwerkdatenladen nebenläufig und das Gif wird sich bewegen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Spike schrieb:

    leider dreht sich allerdings mein .gif Image nicht
    Mach ein neues Projekt, PictureBox auf die Form, weise deren Image-Property diese GIF zu.
    Animierte GIFs in PictureBox anhalten für Hover-Effekt
    Wenn sie sich nicht bewegt, musst Du einen GIF-Animator nutzen.
    Das wurde in diesem Thread ausführlich diskutiert.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @VaporiZed
    @RodFromGermany

    Danke euch für die Gedankenstützen und Wegweiser.
    Zum einen habe ich den Rat von VaporiZed verfolgt, was natürlich zum einen dazu führt das auch das laden der Form etwas schneller funktioniert, danke dafür.

    Letz endlich habe ich allerdings nun wie folgt es gelöst bekommen:
    Ich habe nun dennoch mit einem Thread gearbeitet welcher als AdressOf einen Aufruf der gewünschten "Waiting_Form" über die Mainform arbeitet.
    Den Thread starte ich in der gewünschten Form, einmal mit "Thread.IsBackground = True" und dann mit "Thread.Start()"
    Nach dem ablaufen des Form_loads wird der Thread mit "Thread.Abort()" gekillt. (Ja ich weis nicht wirklich die sauberste Lösung, aber funktional)

    Den Aufruf der Waiting_Form habe ich übrigens nicht als .Show sondern .ShowDialog, was auch hier dazu führte das es nun ohne Probleme funktioniert.
    Die Daten werden nun im Hintergrund geladen, die Waiting_Form wird sauber dargestellt und nach dem laden des Form_load wieder geschlossen.

    Es wäre zumindest auch noch ein Weg.

    Danke dennoch für alle Vorschläge.

    Gruss Spike