Rückmeldung beim Laden

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Rückmeldung beim Laden

    So ich bins mal wieder. Mein Programm läuft jetzt, danke nochmal, doch nun habe ich ein anderes problem:

    wenn man auf den button klick führt mein prog eine nunja relativ aufwendige funktion aus, das problem ist es sieht aus als hätte es sich aufgehängt ist jedoch nicht der fall.
    Er tut es und die funktionfunktioniert auch. jedenfalls wollte ich jetzt so eine kleine Rückmeldung für den benutzer machen: ein label dessen text sich verändert sobald 1 ein item in der liste (durch "," und split) in der funktion durchgegangen wird. das problem ist (vermute ich jedenfalls) die funktion ist zu "schwer" für mein programm und er führt nur die funktion aus und ignoriert die rückmeldung.

    hier mein code (verändert da ich nicht will das das programm kopiert wird) :

    VB.NET-Quellcode

    1. [oben]
    2. dim current_count as integer
    3. Private Sub Button5_Click(sender As System.Object, e As System.EventArgs) Handles Button_send.Click
    4. Label16.Text = "Sending"
    5. Dim meinelistediezubearbeitenist As String
    6. meinelistediezubearbeitenist = TextBox_liste.Text
    7. For Each element_einzel As String In element_from_list.Split(",")
    8. meinefunktion(element_einzeln)
    9. Label16.Text = "Sending" & current & " of " & gesammt_anzahl_aller_elemente
    10. Next
    11. meinefunktion()
    12. End Sub
    13. sub meinefuntkion(byval xy as string)
    14. blablabla führ das und das aus
    15. current_count = current_count + 1
    16. end sub


    so ungefähr sieht es aus, klappt jedoch nicht
    OMG -.-

    es hängt sich ja nicht auf es läuftund führt eine funtkion aus nur sieht ds für den benutzer so aus als ob es sich aufhängt weil ess keine rückmeldung gibt dass es läuft bzw. wie weit es schon ist

    Bin selbst drauf gekommen

    An alle die das selbe problem haben:
    schreibt:
    Application.DoEvents()
    nach eurem Akutallisierungs-Befehl und es wird funktionieren !!!
    bei mir siehts jetzt so aus :

    VB.NET-Quellcode

    1. Label16.Text = "Send" & current & " of " & TextBox_repeat_times.Text
    2. Application.DoEvents()


    Edit by der_Kurt:
    Die Farbe ROT ist der Moderation vorbehalten
    * Farbe geändert und aufdringliche Schriftgröße entfernt *

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „der_Kurt“ ()

    AAaaa Augenkrebs!!!
    Bitte entferne die rote Farbe, die ist nur Moderatoren vorbehalten.

    Nächstes: Application.DoEvents() ist unsauber.
    Verwende Label16.Refresh().
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils

    Routess schrieb:

    OMG -.-

    es hängt sich ja nicht auf es läuftund führt eine funtkion aus nur sieht ds für den benutzer so aus als ob es sich aufhängt weil ess keine rückmeldung gibt dass es läuft bzw. wie weit es schon ist

    Myrax schrieb:

    dann beschäftige dich mal mit Threads.
    alles gesagt. Es gibt dazu sogar eine fertige Komponente: Den BackgroundWorker. So, wie du es jetzt gelöst hast, ist es sehr schlecht und nicht sauber gelöst. Außerdem ist es viel langsamer

    Skybird schrieb:

    Das sind ja Ubisoftmethoden hier !

    Pack Deine Berechnung in einen Backgroundworker oder in einen separaten Thread, da wirde Deine GUI völlig entlastet.
    Und dann sende aus dem Thread (Invoke()) entsprechende Statusinformationen an die GUI, da kannst Du z.B. eine ProgressBar mit ansteuern.
    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!