簡體   English   中英

控制台應用程序C#中的計時器類

[英]Timer Class In Console Application C#

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來設置要調用的方法。 我怎樣才能做到這一點?

這是我最近成功使用的。

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

我猜您正在使用System.Timers.Timer類。
我建議改為嘗試使用System.Windows.Forms.Timer類。 它不需要靜態回調函數,並且使用起來比較容易(由於它沒有線程化,因此更易於調試)。
這將需要對System.Windows.Forms程序集的引用。

timer.Tick += new EventHandler(CallbackFunction);

如果您要堅持使用System.Threading.TimerPacketPollerPacketPoller ,但是讓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的方法簽名以及您的構造函數調用)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM