Rubrik: Verschiedenes / Sonstiges | VB-Versionen: VB2010 - VB2015 | 21.02.18 |
Was man bspw. mit dem Event 'Application_Idle' machen kann... Im Tipp wird eine Möglichkeit zur Ausnutzung des Ereignisses Application_Idle vorgestellt. | ||
Autor: Dietrich Herrmann | Bewertung: | Views: 5.432 |
ohne Homepage | System: Win7, Win8, Win10, Win11 | kein Beispielprojekt |
Ich habe mal versucht, mein Programm, wenn es sozusagen auf dem Desktop dahin dämmert und nichts zu tun hat, einfach abzuschalten.
Dazu habe ich im Programm zwei Timer definiert:
Dim WithEvents halfTime As Timer ' die halbe Wartezeit Dim WithEvents idleTimer As Timer ' die Wartezeit
Im Load-Ereignis der Startform initialisiere ich diese Timer:
idleTimer = New Timer() With {.Interval = 180000, .Enabled = True} ' 3 min AddHandler Application.Idle, AddressOf Application_Idle halfTime = New Timer() With {.Interval = idleTimer.Interval / 3, .Enabled = False}
Das bedeutet:
Die Gesamtwartezeit für idleTimer wird auf 3 Minuten eingestellt, d.h.: falls mein Programm 3 Minuten lang 'nichts zu tun' hat, soll was geschehen. Das wird weiter unten erläutert. Dann wird der Ereignis-Handler definiert
als die Funktion 'Application_Idle', in der dei Aktion programmiert ist. Die halbe Wartezeit definiere ich, um nach Vergehen dieser schon mal eine vorhergehende Aktion auszuführen.
Hier jetzt das Ereignis für die halbe Wartezeit:
Private Sub halfTime_Tick(sender As Object, e As EventArgs) _ Handles halfTime.Tick If WindowState <> FormWindowState.Minimized Then WindowState = FormWindowState.Minimized End If halfTime.Enabled = False End Sub
Wenn die halbe Idle-Time (Wartezeit) vergangen ist, wird erst mal das Fenster der Startform minimiert.
Ist die gesamte Idle-Time vergangen, also wurde mit dem Programm keine Bedien-Aktion mehr vorgenommen, wird die Funktion 'Application_Idle' ausgeführt:
Private Sub Application_Idle(ByVal sender As Object, ByVal e As EventArgs) With idleTimer .Stop() .Start() If WindowState <> FormWindowState.Minimized Then halfTime.Enabled = True End If End With End Sub
Der Code für den Timer idleTimer führt dann die endgültige Aktion aus:
' der Timer für das Idle-Verhalten Private Sub idleTimer_Tick(sender As Object, e As EventArgs) _ Handles idleTimer.Tick With idleTimer .Stop() .Dispose() End With RemoveHandler Application.Idle, AddressOf Application_Idle Close() Application.Exit() End Sub
D.h.: Wenn die gesamte Idle-Time vergangen ist, wird die Application beendet.