[英]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.Timer
, PacketPoller
其PacketPoller
,但是讓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.