Using Timer only once

霸气de小男生 提交于 2019-12-23 07:57:45

问题


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.


回答1:


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.




回答2:


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




回答3:


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();


来源:https://stackoverflow.com/questions/2841177/using-timer-only-once

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!