请朋友看看这段代码的问题所在

moonlighter 2008-12-20 08:58:12
private void TimerProc() //这是处理一个定时任务的代码
{
//停止定时
timerGetInfo.Stop(); //timerGetInfo是窗口上的一个定时器

//定时任务
///////////////////////////////////////
// 这里执行定时任务
///////////////////////////////////////

SetMsg("本次定时任务执行结束!");
SetTimerInterval();
}

private void SetTimerInterval()
{
timerGetInfo.Stop();
try
{
_EnactTime = ConfigurationManager.AppSettings["Timer"].ToString(); //在配置文件中设置每天早晨5点时执行定时任务
DateTime t1 = DateTime.Now;
DateTime t2 = DateTime.Parse(t1.ToString("yyyy/MM/dd") + " " + _EnactTime);
TimeSpan ts;
if (t1.CompareTo(t2) < 0)
{
ts = t2.Subtract(t1);
}
else
{
t2 = DateTime.Parse(t1.AddDays(1).ToString("yyyy/MM/dd") + " " + _EnactTime);
ts = t2.Subtract(t1);
}
int inv = Convert.ToInt32(ts.TotalSeconds * 1000);
timerGetInfo.Interval = inv;
SetMsg("下次定时任务时间是:" + t2.ToString("yyyy/MM/dd HH:mm:ss")); //SetMsg是一个显示消息的方法。
timerGetInfo.Start();
}
catch(Exception e)
{
SetMsg("无法设置下次定时任务的时间,错误是: " + e.Message);
}
}

在主窗口的Load事件处理中加入了SetTimerInterval(),在启动应用程序后,查看第二天的日志,发现5点钟时准时启动了定时任务,并在定时任务结束后显示:
“下次定时任务时间是:2008/12/20 05:00:00”,但查看第三天的日志时,发现在20日的5点并没有启动定时任务。是这段代码有什么问题吗?
...全文
156 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
moonlighter 2008-12-31
  • 打赏
  • 举报
回复
问题解决了,给有类似经历的朋友提个醒:
定时器有线程定时器和窗口定时器之分。在设计中,过程TimerPorc()实际是一个在窗口定时器启动的一个线程,在这个线程结束时再指定窗口定时器的属性和启动定时就会失败。我把SetTimerInterval()过程放到窗口方法中就解决了问题。
同时谢谢juedaihuaihuai,结贴!
moonlighter 2008-12-20
  • 打赏
  • 举报
回复
再说明一下:
这段代码的问题是,应用程序启动后,第一次定时任务(即第2天的5点任务)能够启动执行,但第二次定时任务(即第3天的5点任务)就不能启动执行,或者说第二次定时好象没有触发。
请朋友看看问题所在。
moonlighter 2008-12-20
  • 打赏
  • 举报
回复
timerGetInfo.Start()是定时器的方法,我怎么贴出来?
绝代坏坏 2008-12-20
  • 打赏
  • 举报
回复
timerGetInfo.Start(); 这个方法贴出来看看。

111,130

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧