类库中的Timer对象?

时间:2012-05-16 07:54:38

标签: c# timer class-library

我尝试使用以下代码在类库中运行计时器,但未触发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); 
}

4 个答案:

答案 0 :(得分:2)

你必须.Start():)

答案 1 :(得分:2)

基于表单的计时器不起作用,它需要运行活动消息泵才能处理tick事件。

System.Timers.Timer将按预期工作,但前提是Start或启用它(通过Enabled = true)。请注意,默认情况下,Elapsed事件将在任意ThreadPool线程上触发。您可以使用SynchronizingObject属性来控制事件运行的线程。

答案 2 :(得分:0)

从计时器声明中删除静态并从事件和SetTimer方法中删除静态,将它放在类库中扩展Form的类中并且它有效。

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);
}

答案 3 :(得分:-1)

尝试使用System.Threading.Timer