Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using Timer only once

Tags:

c#

winforms

timer

I want to use a timer only once, at 1 second after the initialization of my main form. I thought the following would have a message box saying "Hello World" just once, but actually a new message box says "Hello World" every one second.

Why so? I had put t.Stop() in the tick event. Also, do I need to dispose the timer somehow to avoid memory leakage?

        Timer t = new Timer();
        t.Interval = 1000;                
        t.Tick += delegate(System.Object o, System.EventArgs e)
                        { MessageBox.Show("Hello World"); t.Stop(); };

        t.Start();   

Please help and show if there is a better way of doing this? Thanks.

like image 914
zaidwaqi Avatar asked May 15 '10 18:05

zaidwaqi


3 Answers

Replace MessageBox.Show("Hello World"); t.Stop(); with t.Stop();MessageBox.Show("Hello World");. Because you're not pressing OK in time, the timer has already ticked again and you never reached the stop code.

like image 98
Yuriy Faktorovich Avatar answered Oct 19 '22 18:10

Yuriy Faktorovich


Put t.Stop(); before the MessageBox.Show("Hellow World");

like image 32
Robb Avatar answered Oct 19 '22 17:10

Robb


You can achieve this also with System.Timers.Timer and setting AutoReset to false. I was looking into which timer to use and prefer this one as it does not require the separate stop command.

using System;
using System.IO;
using System.Timers;

System.Timers.Timer t = new System.Timers.Timer() {
    Interval = 1000,
    AutoReset = false
};

t.Elapsed  += delegate(System.Object o, System.Timers.ElapsedEventArgs e)
    { Console.WriteLine("Hell");}; 
t.Start();
like image 39
user232548 Avatar answered Oct 19 '22 18:10

user232548