Backgroundworker ShowDialog

  • VB.NET

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

    Backgroundworker ShowDialog

    Hallo Com,
    vl. gaanz einfach: Ich möchte während der Ausführung einer Sub Routine ein Laden... Fenster anzeigen.
    Als Pseudocode

    VB.NET-Quellcode

    1. private sub()
    2. fenster.showdialog
    3. versch. Aufrufe von Funktionen ...
    4. fenster.schließen
    5. end sub


    Herausgefunden habe ich, dass ich evtl. mit dem BackgroundWorker arbeiten muss nur bekomme ich es nicht hin, das Fenster wieder zu schließen.
    Mein Code:

    VB.NET-Quellcode

    1. Dim WithEvents BGW As New System.ComponentModel.BackgroundWorker With {.WorkerSupportsCancellation = True}
    2. Private Sub TEST()
    3. If Not BGW.IsBusy Then
    4. BGW.RunWorkerAsync()
    5. End If
    6. 'Hier steht der umfassende Code...
    7. BGW.CancelAsync()
    8. End Sub
    9. Private Sub BGW_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BGW.DoWork
    10. FormLaden.ShowDialog()
    11. End Sub
    12. Private Sub BGW_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BGW.RunWorkerCompleted
    13. FormLaden.Dispose() 'Dialog schließen?
    14. End Sub
    bitte nicht den BGW. Der war schon 2005 Schrott, und ists heutzutage nur noch mehr.

    Dein PseudoCode ist widersprüchlich: Wenn du ein fenster mit .ShowDialog öffnest, dann kannst du keine weiteren Operationen durchführen, bis es wieder geschlossen ist.

    Daher kann ich nicht verstehen, was du eiglich machen willst.

    vlt. willst du das andere Form ja einfach mit .Show anzeigen statt mit ShowDialog - probier halt mal den Unterschied.
    Hallo EDR,
    danke für deine Antwort.
    Das mit .show und .showDialog ist mir bekannt. Wenn ich den BGW verwende, so habe ich gelesen, muss es .showDialog sein. Das behindert sich ja nicht, da es eben in einem andern Thread ausgeführt wird.
    Wenn ich das ganze mit .show und am Ende wieder mit .close mache, dann wird mir aber der Inhalt der Form nicht richtig angezeigt -> siehe Anhang.
    Eigentlich würde ich ja gern so einen Spinner anzeigen: arabianbusiness.com/skins/ab.main/gfx/loading_spinner.gif -> aber der wird natürlich auch nicht richtig angezeigt.

    Lösung:
    Viel zu einfach :)

    VB.NET-Quellcode

    1. Dim frm As New frmLoader
    2. frm.Show()
    3. frm.Refresh()


    Nach dem .show muss noch ein .refresh kommen.
    Bilder
    • Loader.png

      2,99 kB, 249×230, 58 mal angesehen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „klyer“ ()

    klyer schrieb:

    Wenn ich den BGW verwende, so habe ich gelesen, muss es .showDialog sein.
    heißt anders herum:
    Wenn Du keinen BGW veerwendest, genügt ein .Show().
    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!