Programm vor aufhängen schützen

  • VB.NET

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

    Programm vor aufhängen schützen

    Hallo
    Hab ein kleines problem mein programm soll etwas von einem FTP-Server herunterladen. Was auch eigentlich einwandfrei funktioniert.
    Aber manchmal wenn das downloaden länger dauert wird angezeigt das es keine Rückmeldung gibt, was aber auch dann bald wieder weg geht.
    Wie kann ich es machen, dass das Programm ohne aufhängen weiterläuft?
    Schieb die Download-Funktionalität in einen Backgroundworker, dann ist der Main-Thread damt nicht mehr überlastet.
    Dazu gibt es beliebig viele Threads im Forum ("Downlioad", "Backgroundworker").
    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!

    VB.NET-Quellcode

    1. e.cancel = true
    2. bzw.
    3. e.cancel = false



    müsste funktionieren ;)
    Verhidnert, das das Programm sich schließt.
    Und des müsstest du jetzt bei FormClosing reinschreiben ;)
    und danach wieder eine zeile, damit sich die form neu lädt:

    VB.NET-Quellcode

    1. Meineform.show()
    2. Meineform.reload()
    3. Meineform.refresh()



    Bei mir gings ;)

    Lg

    Konsti
    In einem seperaten Thread eine Endlosschleife mit Application.DoEvents() einfügen:

    VB.NET-Quellcode

    1. Do
    2. Application.DoEvents()
    3. Loop

    Das ganze sieht dann etwa so aus:

    VB.NET-Quellcode

    1. Sub Upload
    2. Dim t as New Threading.Thread(AdressOf Events)
    3. t.Start()
    4. 'Dein Code zum Uploaden
    5. t.stop()
    6. End Sub
    7. Sub Events()
    8. Do
    9. Application.DoEvents()
    10. Loop
    11. End Sub


    //edit:
    oder du machst gleich alles in einen seperaten Thread. Dafür Codest du:

    VB.NET-Quellcode

    1. Sub Upload()
    2. 'Dein Code zum Uploaden
    3. Msgbox("Vorgang ist beendet.")
    4. End Sub

    Aufruf erfolgt dann so:

    VB.NET-Quellcode

    1. Dim t as New Threading.Thread(AdressOf Upload)
    2. t.Start()
    --- Zurzeit inaktiv ---
    Application.DoEvents() ist ein Relikt aus VB6, welches in .Net nicht verwendet werden sollte.
    Stattdessen verwende man Threading.
    Wies Live hier zeigt, isses total falsch, denn er verwendet ja bereits (eine unzureichende Version von) Threading, und, wie gesagt, man verwende Threading stattdessen, nicht zusätzlich.

    @StrikeAll: Forumse geben häufig viele verschiedene Antworten, meist untereinander inkompatibel - das kann verwirren :)

    Hier meine Antwort:
    Wenn du Threading ein bisserl besser verstehen willst, lies dir AsyncWorker - CodeProject