控制台应用C#中的定时器类

时间:2014-05-01 14:09:09

标签: c# timer

public class PacketPoller
{
    private Timer m_timer;

    public void Start()
    {
        m_timer = new Timer(OnTick(null), null, 0, 1);
        m_timer.InitializeLifetimeService();
    }

    public Action<Object> OnTick() { }
}

这是我的代码,但是,计时器似乎需要static方法,而不是面向对象的方法。我能做些什么呢?我希望用户能够创建一个新的Timer,然后更改它的OnTick以设置要调用的方法。我怎么能这样做?

3 个答案:

答案 0 :(得分:0)

这是我最近成功使用的。

        DispatcherTimer timer1stDoze = new System.Windows.Threading.DispatcherTimer();
        timer1stDoze.Tick += new EventHandler(timer1stDoze_Tick);
        timer1stDoze.Interval = new TimeSpan(0, 5, 0);
        timer1stDoze.Start();

答案 1 :(得分:0)

我猜你正在使用System.Timers.Timer类 我建议尝试使用System.Windows.Forms.Timer类。它不需要静态回调函数,并且更容易使用(由于没有线程化,因此更容易调试)。
这需要引用System.Windows.Forms程序集。

timer.Tick += new EventHandler(CallbackFunction);

答案 2 :(得分:0)

如果您要坚持使用System.Threading.Timer,请尽可能地拥有它,但让您的PacketPoller拥有自己的事件,您将同时开火:

public class PacketPoller
{
    public event EventHandler Tick;

    private Timer m_timer;

    public void Start()
    {
        m_timer = new Timer(OnTick, null, 0, 1);
        m_timer.InitializeLifetimeService();
    }

    public void OnTick(object state) 
    { 
        var tick = this.Tick;
        if (tick != null)
            tick();
    }
}

听众将直接连接到您的PacketPoller.Tick活动,而不是m_timer。我假设你没有一个状态可以通过,但如果你需要,你可以通过它。 (注意我修改了OnTick的方法签名以及你的构造函数调用)