Struktur Sub Main Start, Hintergrundaktivität und Anzeigefenster

  • VB.NET
  • .NET 5–6

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

    Struktur Sub Main Start, Hintergrundaktivität und Anzeigefenster

    Hallo,

    ich habe folgenden Programmstart.

    VB.NET-Quellcode

    1. Module ModuleStart
    2. Private WithEvents StartForm As Form1
    3. Friend ProgSettings as List(Of String)
    4. Sub Main()
    5. ProgSettings = File.ReadAllLines("path").ToList
    6. StartForm = New Form1
    7. Application.Run(StartForm)
    8. End Sub
    9. Private Sub UndTschuess(sender As Object, e As CancelEventArgs) Handles StartForm.Closing
    10. File.WriteAllLines("path", ProgSettings)
    11. RemoveHandler StartForm.Closing, AddressOf UndTschuess
    12. StartForm.Dispose()
    13. End Sub
    14. End Module


    Erster Punkt: Ist sowas in Ordnung? ProgSettings ist ein Feld des StartModuls, sollte daher nicht durch das Form bearbeitet werden, oder?

    VB.NET-Quellcode

    1. Friend Class Form1
    2. Private Sub Iwas
    3. ProgSettings(1) = "Neue Einstellung"
    4. End Sub
    5. End Class
    Aber wie mache ich es anders; die Methode Iwas() ins Modul verfrachten und den String übergeben? Was macht das für einen Unterschied im großen Ganzen?

    Zweitens: Das Hauptfenster ruft einen Dialog auf, welcher erstmal nur als Anzeige dient.
    Wenn dieser geöffnet bleibt, läuft im Hauptfenster weiterhin ein Timer, kann ich in dem Timer AktualisierungsMethoden des Dialogs aufrufen oder sollte der Dialog selbst timen?
    Ich komm damit in die Bredouille, dass auch nachdem das DialogForm Disposed ist diese Methoden noch aufgerufen werden; haben dann natürlich keinen Sinn mehr. Ich denke sowas sollte eher einen Fehler auslösen.

    Viele Grüße

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „Haudruferzappeltnoch“ ()

    Haudruferzappeltnoch schrieb:

    Ich denke sowas sollte eher einen Fehler auslösen.

    VB.NET-Quellcode

    1. StartForm.Dispose()
    2. StartForm.Dispose()
    erzeugt keinen Fehler, solange StartForm nicht Nothing ist, ist aber nicht erforderlich, setze in Form1.Dispose einen Haltepunkt.
    Die ProgSettings würde ich nicht im ModuleStart einlesen, da gehören sie einfach nicht hin, pack die in die StartForm.
    Dort ist Platz für ein globales UnhandledExceptionHandling.
    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!
    Sry so meinte ich den zweiten Punkt:

    VB.NET-Quellcode

    1. Friend Class Form1
    2. Private Overview As OverviewForm
    3. Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    4. Overview.Aktualisieren()
    5. End Sub
    6. End Class
    7. Friend Class OverviewForm
    8. Friend Sub Aktualisieren()
    9. ...Aktualisierungen an der Darstellung
    10. End Sub
    11. Private Sub OverviewForm_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing
    12. Dispose() 'Wird nicht mehr dargestellt.
    13. End Sub
    14. End Class


    Zu Erstens: Settings brauche ich aber schon vor dem Aufruf des Forms.
    @Haudruferzappeltnoch Warum läuft der Timer nicht in der OverviewForm, wo er hingehört?
    Wenn die OverviewForm geschlossen wird, muss sie der Form1 dies mitteilen, sonst knallt es.
    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!

    Haudruferzappeltnoch schrieb:

    Wie teile ich der StartForm das mit?
    Entweder Du sendest ein Event, das FormClosed-Event wäre gut, oder Du fragst ab, ob die Form "noch lebt":

    VB.NET-Quellcode

    1. Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    2. If Not Overview.IsDisposed Then
    3. Overview.Aktualisieren()
    4. End If
    5. End Sub
    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!