tags:

views:

48

answers:

2

Hi,

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.

+2  A: 

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.

Yuriy Faktorovich
+1 for being beat'd.
Robb
Ok, that works. Thanks.But what's the logic?Why the order matters?
zaidwaqi
@zaidwaqi: The thread goes into MessageBox.Show method, and doesn't leave until you press OK. But you don't press OK fast enough, and it has already opened a new MessageBox.
Yuriy Faktorovich
Oh :)What about disposing the timer? Is it needed since the timer will not be used anymore?
zaidwaqi
+1  A: 

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

Robb