• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 182
  • Last Modified:

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

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()
        MyBase.New()

        'This call is required by the Windows Form Designer.
        InitializeComponent()

        '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
                components.Dispose()
            End If
        End If
        MyBase.Dispose(disposing)
    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.SuspendLayout()
        '
        'Button1
        '
        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"
        '
        'Button2
        '
        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"
        '
        'Form1
        '
        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"
        Me.ResumeLayout(False)

    End Sub

#End Region

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

    End Sub


    Private Sub displayContent()
        MessageBox.Show("Hello")
    End Sub
End Class
0
vaultworld
Asked:
vaultworld
2 Solutions
 
Erick37Commented:
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
0
 
S-TwilleyCommented:
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:
tmrMyTimer.Start

to stop the time:
tmrMyTimer.Stop

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
        tmrMyTimer.Stop
        'timer has elapsed

        tmrMyTimer.Start
    End Sub
0
 
vaultworldAuthor Commented:
Thanks to both of you.
0

Featured Post

VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now