类库中的计时器对象

本文关键字:对象 计时器 类库 | 更新日期: 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