类库中的计时器对象
本文关键字:对象 计时器 类库 | 更新日期: 2023-09-27 18:34:31
我尝试按照代码在类库中运行计时器,但timer_Elapsed没有被触发。我也尝试使用System.Windows.Forms的计时器,但它不起作用。
private static void SetTimer(DateTime dateTime)
{
timer = new System.Timers.Timer();
TimeSpan timeSpan = dateTime - DateTime.Now;
timer.Interval = timeSpan.Milliseconds;
timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
timer.Enabled = true;
timer.Start();
}
private static void timer_Elapsed(object myobject, System.Timers.ElapsedEventArgs e)
{
timer.Enabled = false;
timer.Stop();
Start(_appCastURL, _remindLaterAt, _remindLaterFormat);
}
基于表单的计时器不起作用,它需要一个活动的消息泵来运行才能处理tick事件。
System.Timers.Timer 将按预期工作,但前提是您Start
或启用它(通过 Enabled = true
(。请注意,默认情况下,Elapsed
事件将在任意ThreadPool
线程上触发。可以使用 SynchronizingObject
属性来控制运行事件的线程。
你必须.Start()
它:)
从计时器声明中删除静态,并从事件和 SetTimer 方法中删除静态,将其放入类库中的类扩展表单中,它就可以工作了。
private void SetTimer(DateTime remindLater)
{
timer = new System.Timers.Timer();
TimeSpan timeSpan = remindLater - DateTime.Now;
timer.Interval = (int) timeSpan.TotalMilliseconds;
timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
timer.Start();
}
private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
timer.Stop();
AutoUpdater.Start(appCast, remindLaterAt, remindLaterFormat);
}
尝试使用 System.Threading.Timer