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以设置要调用的方法。我怎么能这样做?
答案 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
的方法签名以及你的构造函数调用)