Wie wird der Timer verwendet

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von DniBo.

    Wie wird der Timer verwendet

    Hallozusammen,

    ich hatte in meinem vorigen Thread die Frage falsch angegangen, daher möchte ich erst beschreiben was ich machen will und was ich brauche.

    Um den Start eines Programmes zu kontrollieren bzw im Fehlerfall schon vorher eingreiffen zu können (das Programm ist nicht von mir), schreibe ich an einem Launcher der erst nach Prüfung diverser Zustände auf dem Gerät das eigentliche Programm startet.

    Der Launcher soll unsichtbar sein, sofern keine Info an den Anwender erfolgen muss, daher habe ich mich für eine Konsolen-Anwendung entschieden.

    Die Prüfungen sind soweit kein Problem, das ganze läuft recht gut, nur möchte ich die Info an den Anwender verbessern.

    Bei fünf festgestellten Zuständen bei denen das Programm nicht gestartet werden soll, möchte ich eine Info an den Anwender ausgeben und diese nach einer Wartezeit von 30 Sekunden automatisch schliessen, wobei der Anwender bereits mit einem OK-Button die Meldung vor erreichen der Wartezeit beenden kann. Da ich in der Meldung auch den fehlerhaften Zustand angebe, denke ich pro Meldung an ein Form. Wichtig ist, das die Anwendung und die Meldung nicht einfriert da ich Daten ausgeben und die Rest-Wartezeit im OK-Button ausgeben möchte.

    Ich denke das muss ich mit einem Timer lösen und ein OK-Button, der den Timer ggf beendet wenn vor der Wartezeit der Button geklickt wird. Leider kann es sein (und das ist gerade eine meiner Fragen) das die Konsolen-Anwendung schneller beendet ist als die Melung, also müsste die Anwendung noch auf das Ende der Meldung warten.

    Leider habe ich noch keine Erfahrung mit Timern, zudem scheint das ganze in einer Konsolen-Anwendung anderst zu sein.

    Ich wäre Euch sehr dankbar wenn Ihr mir hier ein paar Tipps geben könntet.

    Vielen Dank,
    Dani
    Hi,

    wenn keine Meldung ausgegeben werden muss, lasse ich kein Form anzeigen, die brauche ich nur wenn eine Info an den Anwender notwendig ist. Ein Backgroundworker bringt vermutlich auch nichts da auch der BGW beim beenden der Konsolenanwendung gekillt wird?

    Viele Grüsse,
    Dani
    also auch eine "Konsolen"-Anwendung, die ein WinForms-Form anzeigen kann ist in meinen Augen keine Konsolen-Anwendung.

    Sollichmal nachgucken, wie man eine WinForms-Anwendung startet, ohne ein Form anzuzeigen?

    Ah - hier: Programm nur Systray (also wenn du das Notify-Icon auch noch weg-liessest)
    Hi EDR,

    vielen Dank für die Info, werde mein Programm nun anderst anfangen.

    Eine Frage noch:
    Wie würdest Du vorgehen um bei einem Timer.Interval = 30000 die restlich verbliebene Zeit im Dialog auszugeben? Soll quasi ein CountDown sein und die Ausgabe wäre dann 30, 29, 28, 27, ... 01

    Viele Grüsse,
    Dani
    HI EDR,

    ich habe das jetzt so gemacht, ist denke ich ok. Wenn nicht sind Infos zur Verbesserung immer gern gesehen :)

    VB.NET-Quellcode

    1. Public Class frmDeploymentStatus
    2. Private CountdownSeconds As Integer = 10 'Sekunden für Countdown
    3. Private CancelButtonText As String = "" 'Beschriftung des Button (wird ausgelesen)
    4. Private Sub frmDeploymentStatus_Shown(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Shown
    5. RichTextBox1.ReadOnly = True 'TextBox nur Readonly
    6. CancelButtonText = btnFrmDlgClose.Text 'Auslesen der aktuellen Button-Beschriftung
    7. tmrDeploymentStatus.Interval = 1000 'Intervall für 1 Sekunde
    8. tmrDeploymentStatus.Enabled = True 'Timer aktivieren
    9. End Sub
    10. Private Sub btnFrmDlgClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFrmDlgClose.Click
    11. tmrDeploymentStatus.Stop() 'Timer stoppen
    12. closeForm()
    13. End Sub
    14. Private Sub tmrDeploymentStatus_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrDeploymentStatus.Tick
    15. 'wenn der Counter nicht 0 ist wird heruntergezählt, ansonsten der Timer beendet und die Form geschlossen
    16. If CountdownSeconds > 0 Then
    17. CountdownSeconds = CountdownSeconds - 1
    18. btnFrmDlgClose.Text = CancelButtonText & " [" & CountdownSeconds & "]"
    19. Else
    20. closeForm()
    21. End If
    22. End Sub
    23. Private Sub closeForm()
    24. tmrDeploymentStatus.Enabled = False 'Timer deaktivieren
    25. Close() 'Form schliessen
    26. End Sub
    27. End Class


    Viele Grüsse,
    Dani



    PS: Sorry für die Formatierung, sieht ja übel aus...
    PSS: nun gefixt dank EDR :)

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

    Hi EDR,

    Code gefixt, sieht nun sehr viel besser aus. Auf den Tab Quellcode-Editor habe ich nie geachtet, man lernt immer was dazu.

    Was meinst Du zum Code? Ist das so ok?
    Frage nur deshalb da es bei mir soweit klappt, ich aber gerne Problemen aus dem Weg gehe die evtl später auftreten können...

    Viele Grüsse,
    Dani