1

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

4 回答 4

2

你将不得不这样.Start()做:)

于 2012-05-16T07:55:28.460 回答
2

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

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

于 2012-05-16T07:58:34.203 回答
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);
}
于 2012-05-20T05:34:46.767 回答
-1

尝试使用 System.Threading.Timer

于 2012-05-16T07:56:47.480 回答