c#创建timer过了0点不执行

我用system.timer创建timer,过1H执行一次
timer = new System.Timers.Timer(1000*60*60); //过一小时执行一次
timer.AutoReset = true;
timer.Start();
timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);//回调函数
问题是,当天之内能执行,但是过了晚上12:00就不执行了。意思就是到了第二天不会执行。

第1个回答  2013-08-01
这种就不应该用timer,应该用线程。线程休眠和定时开启。
timer是当前时间减去上次发生的时间,过12点,那么当前时间小于上次定时时间。所以不会执行追问

意思是我做一个死循环,在循环里创建一个线程,让它休眠一小时,一小时过后就开启线程。是这样吗?

追答

在外面创建线程,循环盘算时间

第2个回答  2013-08-01
你想一小时执行一次,可以采用直接读取系统时间的方式,遇到整点就执行
第3个回答  2013-08-02
请注意你是不是在某个地方进行了如下调用,如有以下代码请重点关注
timer.Dispose();
timer.Stop();
timer.Close();
timer.Enabled = false追问

有的,我在最外层关闭和释放了timer,一直没用timer.enabled

追答

在关闭或是释放timer的代码附近加入日志记录,运行一天后查看是否是不小心将timer关闭导致第二天tmer不能执行了。

本回答被提问者和网友采纳
第4个回答  2013-08-01
线程多简单,让他暂停1小时,启动一次
第5个回答  2013-08-01
建议使用System.Threading.Timer

c#创建timer过了0点不执行
这种就不应该用timer,应该用线程。线程休眠和定时开启。timer是当前时间减去上次发生的时间,过12点,那么当前时间小于上次定时时间。所以不会执行

VS2005 C# 中timer控件不执行
我测试了是正常的 可以将你的代码的初始化部分以及Form的Load部分贴出来吗?我感觉问题出在你的private void custombutton_Paint(object sender, PaintEventArgs e) 这个事件是如何调用的

C# WinForm Timeout 时间已到.在操作完成之前超时时间已过或服务器...
数据库我不是很懂,但是前几天我们服务器系统日志也有数据库超时错误信息,是硬盘有坏道、响应慢导致的, 后来换硬盘解决的

C# WinForm Timeout 时间已到.在操作完成之前超时时间已过或服务器...
看删除信息的表是否被锁住

C# WinForm Timeout 时间已到.在操作完成之前超时时间已过或服务器...
说不定你在删除一条信息时,数据库表被另外的操作锁定,你的操作在等待,由于等待超时,所以报出这样的错,下次你调试的时候,原来锁表的那个操作已完成,所以主顺利通过了。

C# 用timer做成服务后 timer_Tick () 为什么不执行??
t.AutoReset = true;\/\/设置是执行一次(false)还是一直执行(true);t.Enabled = true;\/\/是否执行System.Timers.Timer.Elapsed事件;public void theout(object source, System.Timers.ElapsedEventArgs e){ MessageBox.Show("ok");} 如果控件是拖过来的,您可以在 窗体名.Designer.cs 这个文件中将 ...

C#程序定时执行时,到指定时间却不能执行
timer.Interval = 1000;\/\/设置间隔 这个你忘了设置

c#计时器timer在do while里为什么不执行?
虽然理论上不至于让机器死掉,但是怎么看也是一个不科学的代码。你完全可以这么写 Timer.Enable = true;Sleep(5000);Timer.Enable = false;或者这么写,在Timer的触发函数里加上 if(DateTimer.Now > aftertime)Timer.Enable = false;只不过需要将aftertime作为成员变量。

求助C#服务TIMER不执行
timer启动了吗?使用timer前先要注册事件,设置间隔,然后用timer.Start();启动。想关闭timer的时候用timer.Stop();

C# Threading.Timer 为什么过了一会儿自己停了
可能原因:自定义方法Threading()是在UI主线程空闲上执行,而timer_Elapsed是在线程池当中的一个线程上执行,两者执行时很可能在执行 void timer_Elapsed(object sender){ t = new Thread(new ThreadStart(Threadp)); \/\/实例化线程 \/\/线程池当中的线程执行到这里时,UI主线程执行Threading()的 t....

相似回答
大家正在搜