作者Eleganse (王建民)
看板C_Sharp
标题[问题] Windows Service中timer的暂停设定
时间Tue Nov 17 16:58:39 2009
小弟设计了一个视窗服务应用程式,用以常驻於电脑。
以下是部份程式码。
namespace WS
{
public partial class Service1 : ServiceBase
{
public Service1()
{ InitializeComponent(); }
protected override void OnStart(string[] args)
{}
protected override void OnStop()
{}
private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
timer1.Enabled = false;//进入事件处理程序,时间暂停
该程序()
{首先侦测电脑内某个资料夹是否有其它人上传的数据资料,
如有,则开始演算工作。
如没有,则结束本次服务。}
timer1.Enabled = true;//处理事件完毕,时间继续
}
}
}
我将时间间隔(timer.interval)设定为10秒,
也就是希望电脑能每隔十秒侦测一次该资料夹是否有人上传,
而我所设计的程序,由於内含大量资料(数千万笔)的拷贝工作,
正常情况下至少要5分钟,
为了不使5分钟内连续执行了(30次),在进入程序时,
我特意将timer.Enabled关闭,待执行完毕後再开启。
但程式并不如我想像的方式进行,这样的写法,总共只会执行一次,
往後再有人上传资料,该服务也不会动作了,
debug了很久,始终找不到问题,
是否 timer.Enabled=true 该行放的位置有错?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.115.61.67
※ 编辑: Eleganse 来自: 140.115.61.67 (11/17 17:03)
1F:推 petrushka:使用一个Flag标示是否仍在处理中,是的话, 就略过 11/17 21:12
2F:→ petrushka:比起卡在timer不知怎麽改写,要容易得多,山不转路转 11/17 21:14
3F:推 leicheong:请检查AutoReset属性... (看Documentation...) 11/18 10:00
4F:→ Eleganse:AutoReset系统预设为true,应无问题,timer方面无法解决 11/18 12:21
5F:→ Eleganse:目前使用旗标的方式来判断,虽然多几个流程判定工作 11/18 12:22
6F:→ Eleganse:但还可以撰写 应能完成 11/18 12:23
7F:→ Eleganse:只是我还是很好奇 timer的问题到底出在哪 11/18 12:23