What is the best way to do a continuous 2 Second Timer that calls a subroutine

Posted on 2005-04-07
Last Modified: 2012-05-05
To: All

I would like to be able to start and stop a program that would call a subroutine every two seconds.

I've include the shell of a program below

Public Class Form1
    Inherits System.Windows.Forms.Form

#Region " Windows Form Designer generated code "

    Public Sub New()

        'This call is required by the Windows Form Designer.

        'Add any initialization after the InitializeComponent() call

    End Sub

    'Form overrides dispose to clean up the component list.
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        If disposing Then
            If Not (components Is Nothing) Then
            End If
        End If
    End Sub

    'Required by the Windows Form Designer
    Private components As System.ComponentModel.IContainer

    'NOTE: The following procedure is required by the Windows Form Designer
    'It can be modified using the Windows Form Designer.  
    'Do not modify it using the code editor.
    Friend WithEvents Button1 As System.Windows.Forms.Button
    Friend WithEvents Button2 As System.Windows.Forms.Button
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
        Me.Button1 = New System.Windows.Forms.Button()
        Me.Button2 = New System.Windows.Forms.Button()
        Me.Button1.Location = New System.Drawing.Point(40, 24)
        Me.Button1.Name = "Button1"
        Me.Button1.Size = New System.Drawing.Size(88, 24)
        Me.Button1.TabIndex = 0
        Me.Button1.Text = "Start"
        Me.Button2.Location = New System.Drawing.Point(160, 24)
        Me.Button2.Name = "Button2"
        Me.Button2.Size = New System.Drawing.Size(88, 24)
        Me.Button2.TabIndex = 1
        Me.Button2.Text = "Stop"
        Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
        Me.ClientSize = New System.Drawing.Size(292, 273)
        Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.Button2, Me.Button1})
        Me.Name = "Form1"
        Me.Text = "Form1"

    End Sub

#End Region

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        ' Call SubRoutine

    End Sub

    Private Sub displayContent()
    End Sub
End Class
Question by:vaultworld
    LVL 32

    Assisted Solution

    If you add a Timer control to the form, you can call your function in the Tick event.  This example shows how.  The Button will turn the timer on and off.  Setting the Timer Interval to 2000ms wil make the Tick event fire approximately every 2 seconds (not exactly and not precisely).

        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
            Debug.WriteLine("Called: " & Now)
        End Sub

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Timer1.Enabled = Not Timer1.Enabled
        End Sub

        Private Sub Form2_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Timer1.Enabled = False
            Timer1.Interval = 2000 'about 2 seconds
        End Sub
    LVL 12

    Accepted Solution

    The alternative to using the Timer control is to use the Timer class

        Dim WithEvents tmrMyTimer As New Timers.Timer(2000)

        Sub tmrEvent(ByVal sender As Object, ByVal e As Timers.ElapsedEventArgs) Handles tmrMyTimer.Elapsed
            'timer has elapsed
        End Sub


    to start the timer:

    to stop the time:

    to test whether it's running
    ? tmrMyTimer.Enabled


    to change it so the event happens 2 seconds after the other event has finished (incase the event takes a while)

        Sub tmrEvent(ByVal sender As Object, ByVal e As Timers.ElapsedEventArgs) Handles tmrMyTimer.Elapsed
            'timer has elapsed

        End Sub
    LVL 1

    Author Comment

    Thanks to both of you.

    Write Comment

    Please enter a first name

    Please enter a last name

    We will never share this with anyone.

    Featured Post

    IT, Stop Being Called Into Every Meeting

    Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

    I'm currently working for a company where I have to upgrade over 50 VB6 programs to VB.NET 2008.  So far I'm about half way through, and I've learned quite a few tricks that drastically improve the performance of VB.NET apps. Because there are a…
    Well, all of us have seen the multiple EXCEL.EXE's in task manager that won't die even if you call the .close, .dispose methods. Try this method to kill any excels in memory. You can copy the kill function to create a check function and replace the …
    how to add IIS SMTP to handle application/Scanner relays into office 365.
    In this sixth video of the Xpdf series, we discuss and demonstrate the PDFtoPNG utility, which converts a multi-page PDF file to separate color, grayscale, or monochrome PNG files, creating one PNG file for each page in the PDF. It does this via a c…

    758 members asked questions and received personalized solutions in the past 7 days.

    Join the community of 500,000 technology professionals and ask your questions.

    Join & Ask a Question

    Need Help in Real-Time?

    Connect with top rated Experts

    10 Experts available now in Live!

    Get 1:1 Help Now