VB.NET Timer zur Laufzeit erstellen
Inhaltsverzeichnis
- 1 VB.NET Timer zur Laufzeit erstellen
- 2 VB.NET Timer Beispiel – Allgemein
- 3 Timer – Eine kleine Wiederholung
- 4 VB.NET Timer zur Laufzeit erstellen
- 5 VB.NET Timer zur Laufzeit erstellen – Auf Form-Ebene
- 6 VB.NET Timer zur Laufzeit erstellen – Durch Button-Klick
- 7 VB.NET Timer zur Laufzeit erstellen – Mit anonymem Handler
VB.NET Timer zur Laufzeit erstellen
In diesem Beitrag werde ich Dir erklären, wie man in VB.NET einen Timer zur Laufzeit erstellen kann.
Dabei wirst Du unter Anderem sehen, wie die AddHandler-Anweisung zum Einsatz kommt.
In Kombination dazu, benötigen wir auch den AddressOf-Operator, um an die „Adresse“ der zu verknüpfenden Methode zu kommen.
Diese beiden Werkzeuge brauchen wir, um das Tick-Ereignis dynamisch mit einer Methode verknüpfen zu können.
VB.NET Timer Beispiel – Allgemein
Falls du ein allgemeines Tutorial, bzw. ein allgemeines VB.NET Timer Beispiel suchst, wirst du in diesem Beitrag auf meiner Seite fündig.
Dort erkläre ich alle Basics über das Timer-Control, wie z. B. Eigenschaften, Methoden und dessen Funktionsweise.
Zusätzlich erzähle ich noch etwas über einen eigenen kleinen Bug den ich damals zuerst nicht gefunden habe und was man beachten muss.
Timer – Eine kleine Wiederholung
Beispielreiche Einsatzmöglichkeiten
Wie wir im anderen Beitrag schon lernen konnten, ist der Timer dazu da, gewissen Code im Intervall zu wiederholen.
Die Einsatzbeispiele sind vielfältig:
- Eine simple digitale Uhr
- Einen Kalender mit Termin-Synchronisation
- Einen Windows-Service der im Hintergrund eventuell Signale an eine Http-Schnittstelle sendet
- uvm.
Das Tick-Ereignis
Falls Du Dich noch erinnern kannst, oder es ggf. bereits weißt, brauchen wir für die Verwendung des Timers hauptsächlich sein wichtigstes Ereignis: Das Tick-Ereignis.
VB.NET Timer zur Laufzeit erstellen
Nun kann es von Zeit zu Zeit vorkommen, dass man als .NET-Entwickler einen Timer zur Laufzeit erstellen möchte.
Sei es zum Beispiel für ein Spiel der Marke Eigenbau, sei es auch noch so klein, bzw. grafisch noch so schlicht.
Achtung!
Ich möchte bevor ich dir die Beispiele zeige, noch gerne einen gut gemeinten Rat ans Herz legen.
Du solltest Dir bei dem Design Deiner kleinen Anwendung, deines Spiels, etc. im Klaren sein, dass es unter Umständen bessere Lösungen geben könnte, als nachher 15 Timer zu haben – just saying.
Überlege Dir daher ausgiebig, ob Dein Problem nicht eventuell mit wenigeren Timern, oder gar einem erledigt werden könnte.
Allerdings sehe ich es auch teils relativ locker, denn das Lernen ist ein Prozess und man wird nun einmal meist nur durch das Probieren besser – behalt‘ es nur im Kopf!
VB.NET Timer zur Laufzeit erstellen – Auf Form-Ebene
Ist ähnlich dem Designer, nur halt pur Code-Datei basiert, sprich nicht im Designer.
Der Code der Form
Konstruktor
Im Konstruktor der Form initialisieren wir den Timer mit einer neuen Instanz.
Könnte alternativ auch im Load-Ereignis passieren, allerdings macht es für mich persönlich mehr Sinn im Konstruktor.
Im Konstruktor wird halt konstruiert – auch die Kind-Elemente, zumindest wenn keine Dependency Injection o. Ä. verwendet wird..
Das auskommentierte Initialisierungs-Beispiel tut es dem Designer in der Designer-Datei gleich.
Die letzte Zeile erkläre ich hier, im Teil der „WithoutHandlesClause„-Methode
Form1_Load – Load-Ereignishandler
Im Ereignishandler für das „Form-Load„-Ereignis können wir den Timer dann per Timer.Start() starten. Alternativ könnte man natürlich auch hier, oder schon bei der Initialisierung „Enabled“ auf True stellen, etc.
WithHandlesClause – Tick-Eventhandler
Diese Sub ist wie üblich via Handles-Klausel verknüpft, das geht deshalb, weil wir den Timer auf Form-Ebene und mit WithEvents deklariert haben.
WithoutHandlesClause – Tick-Eventhandler
Diese Methode wird dynamisch durch die AddHandler-Anweisung im Konstruktor mit dem Tick-Event des Timers verknüpft. Diese Vorgehensweise ist praktisch das Kernelement des ersten Beispiels.
Imports System.Diagnostics Public Class Form1 Private WithEvents Timer As Timer Sub New() InitializeComponent() Timer = New Timer() ' this is how the designer does it internally ' Timer = New Timer(Me.components) AddHandler Timer.Tick, AddressOf WithoutHandlesClause End Sub Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load ' or use Enabled = True above or here Timer.Start() End Sub Private Sub WithHandlesClause(sender As Object, e As EventArgs) Handles tmrTime.Tick Debug.WriteLine("WithHandlesClause") End Sub Private Sub WithoutHandlesClause(sender As Object, e As EventArgs) Debug.WriteLine("WithoutHandlesClause") End Sub End Class
VB.NET Timer zur Laufzeit erstellen – Durch Button-Klick
In diesem Beispiel zeige ich, wie man einen Timer innerhalb eines „Button-Klick„-Ereignishandlers erstellen kann.
Auch hier werden wir „bekannte Methoden“ verwenden, also Methoden, die bereits in der Form vorhanden sind.
Private Sub btnCreateTimer_Click(sender As Object, e As EventArgs) Dim timer = new Timer() timer.Interval = 1000 ' default 100ms AddHandler timer.Tick, AddressOf MyTicker timer.Start() ' or use Enabled = True if you want to start it immediately End Sub Private Sub MyTicker(sender As Object, e As EventArgs) System.Diagnostics.Debug.WriteLine("MyTicker") End Sub
VB.NET Timer zur Laufzeit erstellen – Mit anonymem Handler
Mit dem dritten und letzten Beispiel möchte ich die Möglichkeit für einen sogenannten „anonymen Handler“ nutzen.
Selbstverständlich muss man auch hier auf die Signatur, also in diesem Fall auf die korrekte Anzahl der Parameter der Methode achten.
Mit anonymer Sub
Hier brauchst Du auch keine AddressOf-Operator angeben, da wir nicht darüber praktisch an die Adresse der Funktion kommen müssen.
Private Sub btnCreateTimer_Click(sender As Object, e As EventArgs) Dim timer = new Timer() timer.Interval = 1000 ' default 100ms AddHandler timer.Tick, Sub(sender, e) Debug.WriteLine("anonymous") End Sub timer.Start() ' or use Enabled = True if you want to start it immediately End Sub
Mit anonymer Sub und Variable
Du kannst diesen Handler auch in eine Variable stecken und dann mit AddHandler zuweisen:
Private Sub btnCreateTimer_Click(sender As Object, e As EventArgs) Dim timer = new Timer() timer.Interval = 1000 ' default 100ms Dim dynamicCreatedHandler = Sub(sender, e) Debug.WriteLine("anonymous") End Sub AddHandler Timer.Tick, dynamicCreatedHandler timer.Start() ' or use Enabled = True if you want to start it immediately End Sub