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