BestPractice - Timer zum Herunterfahren eines PC

  • VB.NET
  • .NET (FX) 4.5–4.8

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

    BestPractice - Timer zum Herunterfahren eines PC

    Guten Tag,
    Ich schreibe gerade an einem Programm zum Herunterfahren eines Rechner. Es hat folgende Funktionen:

    - Beim Starten des Programms wird eine Form angezeigt mit der Meldung dass der Rechner um XX:XX:XX Uhr heruntergefahren wird. (Startzeitpunkt + 5 Min).
    - Der Nutzer hat die Möglichkeit durch klich auf einen Button die Zeit um 30 Minuten zu erhöhen. Danach verschwindet das Fenster.
    - Nachdem es erneut 5 Minuten vor dem Zeitpunkt des Herunterfahrens ist taucht die gleiche Form wieder auf. Wieder mit dem Hinweis auf den Zeitpunkt des Herunterfahrens und mit Buttom zum verschieben um 30 min.
    - Ist der Zeitpunkt erreiche und nicht erhöht wurden fährt der PC Herunter. Hier habe ich derzeit eine MSGBox die nur "Test" ausgibt, diese wird beim dem Zeitpunkt aber mehrfach geöffnet.

    Wie würdet ihr das schreiben? Gibt es vom Code Optimierungspotenzial? Sicherlich gibt es bessere Wege aber ich würde das trotzdem gerne in einem Programm lösen und den besten Weg kennen.
    Hier mein Programmcode:

    VB.NET-Quellcode

    1. Public Class frmShutdownAlert
    2. Dim ShutdownTime As Date
    3. Dim FormInvisible As Integer
    4. Dim ShutdownFlag As Integer
    5. Private Sub tmrShutdownAlert_Tick(sender As Object, e As EventArgs) Handles tmrShutdownAlert.Tick
    6. If TimeOfDay.AddMinutes(1) >= ShutdownTime And FormInvisible = 1 Then
    7. FormInvisible = 0
    8. Me.Visible = True
    9. Me.Activate()
    10. End If
    11. If TimeOfDay >= ShutdownTime And ShutdownFlag <> 1 Then
    12. 'Hier der Herunterfahren Befehl.
    13. MsgBox("Test")
    14. ShutdownFlag = 1
    15. End If
    16. End Sub
    17. Private Sub btnShutdownDelay_Click(sender As Object, e As EventArgs) Handles btnShutdownDelay.Click
    18. ShutdownTime = ShutdownTime.AddMinutes(2)
    19. lblTimeLeft.Text = ShutdownTime
    20. Me.Visible = False
    21. FormInvisible = 1
    22. End Sub
    23. Private Sub frmShutdownAlert_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    24. ShutdownFlag = 0
    25. ShutdownTime = TimeOfDay.AddMinutes(1)
    26. lblTimeLeft.Text = ShutdownTime
    27. End Sub
    28. End Class

    var coffee = new coffee();
    if(coffee.empty)
    {
    coffee.refill();
    } else {
    coffee.drink();
    }
    Option Strict auf On schalten (z.B. Zeile#33 ist Option Strict Off)
    VB6-Namespace (TimeOfDay -> Date.Now; MsgBox -> MessageBox.Show) rausnehmen
    Zeile#24: ich dächt, es wird um 30 Minuten verschoben
    statt And nimm AndAlso
    Warum ist FormInvisible ein Integer und kein Boolean? Gibt es denn da mehr als Ja und Nein?

    Falls Du noch nen Shutdown-Befehl brauchst:

    VB.NET-Quellcode

    1. Diagnostics.Process.Start("shutdown", "/s /t x) 'x = Delay bis Shutdown


    Wofür ist der/das ShutDown-Flag? Wenn der Shutdown erfolgt, mach einfach den Timer aus.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Danke!

    Ich bin noch einen Schritt weiter gegangen und habe die Minuten Werte in Settings ausgelagert. Bei Zeile #24 hatte ich testweise weniger Minuten eingetragen.

    Die Variable FormInvisible brauche ich auch nicht mehr, Ich prüfe nun direkt ob Me.Visible = True ist.

    Der Button erhält seine Beschriftung nun auch in derFormLoad Sub, damit die richtige Minutenanzahl in den Text String eingefügt werden kann.

    MfG. VBDev
    var coffee = new coffee();
    if(coffee.empty)
    {
    coffee.refill();
    } else {
    coffee.drink();
    }
    @VBDev So verhindert das ShutdownFlag, dass die MessageBox erneut gezeigt wird:

    VB.NET-Quellcode

    1. If TimeOfDay >= ShutdownTime And ShutdownFlag <> 1 Then
    2. 'Hier der Herunterfahren Befehl.
    3. ShutdownFlag = 1 ' Flag setzen vor der MessageBox, denn der Timer tickt weiter
    4. MsgBox("Test")
    5. End If
    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!