private System.Timers.Timer timer;
protected override void OnStart(string[] args)
{
Thread.Sleep(30000);
this.timer = new System.Timers.Timer();
this.timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
this.timer.Interval = 1000;
this.timer.AutoReset = true;
this.timer.Enabled = true;
}
void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
}
15 个解决方案
#1
这部分代码看不出什么问题 应该可以执行到 是不是因为时间是30s 你自己没有注意到呢
#2
sleep 30s
#3
30s是我故意加上去,以便够时间附加进程在VS中调试的。OnStart中的代码断点调试看过没有问题,正常执行。但timer_Elapsed事件没有被触发。
#4
是不是因为没启动呀 timer.start(),我不太懂,不过上次用定时器就是因为忘了写这句
#5
this.timer.AutoReset = true;
貌似触发一次之后就不会再触发了
timer_Elapsed放点东西呢,
不要放 messagebox,而是写个日志文件啥的
貌似触发一次之后就不会再触发了
timer_Elapsed放点东西呢,
不要放 messagebox,而是写个日志文件啥的
#6
this.timer.Enabled = true;
和 timer.start()
效果是一样滴
和 timer.start()
效果是一样滴
#7
它现在是连一次都不触发,timer_Elapsed里面有代码,只是我没有贴出来而已。
#8
你调试一下不就行了
#9
就是在调试状态下,发现计时器定时执行的方法没有被执行。
#10
我觉得你重写的那个 onstart 方法都没有执行
#11
你把整个源代码 发上来我给你调试一下
#12
onstart方法有执行,我断点命中了,源码就是这么多了,timer_Elapsed只是做一些输出log的工作,里面的断点没有命中
#13
你的代码我试过 可以执行到timer的事件的 没有问题 要不你就把代码贴过来看看
this.timer.AutoReset = true;
不是只执行一次 而是间隔执行 false的话是只执行一次
this.timer.AutoReset = true;
不是只执行一次 而是间隔执行 false的话是只执行一次
#14
我就需要间隔执行,我是在.net2.0下开发的,服务类型是LocalService和LocalSystem都试过了。代码如下:
private System.Timers.Timer timer;
public Service()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
Thread.Sleep(30000);
this.timer = new System.Timers.Timer(); // 这里断点,能够命中进入调试
this.timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
this.timer.Interval = 1000;
this.timer.AutoReset = true;
this.timer.Enabled = true;
//this.timer.Start();
}
/// <summary>
/// 服务停止事件
/// </summary>
protected override void OnStop()
{
this.timer.Enabled = false;
//this.timer.Stop();
}
void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
Config config = Config.GetConfig(); // 这里断点,没有进入调试
if (config.Status == Status.Start)
{
return;
}
Console.Write("OK");
}
#15
解决了,最后没有用System.Timers.Timer,改用Threading.Timer就可以了。
#1
这部分代码看不出什么问题 应该可以执行到 是不是因为时间是30s 你自己没有注意到呢
#2
sleep 30s
#3
30s是我故意加上去,以便够时间附加进程在VS中调试的。OnStart中的代码断点调试看过没有问题,正常执行。但timer_Elapsed事件没有被触发。
#4
是不是因为没启动呀 timer.start(),我不太懂,不过上次用定时器就是因为忘了写这句
#5
this.timer.AutoReset = true;
貌似触发一次之后就不会再触发了
timer_Elapsed放点东西呢,
不要放 messagebox,而是写个日志文件啥的
貌似触发一次之后就不会再触发了
timer_Elapsed放点东西呢,
不要放 messagebox,而是写个日志文件啥的
#6
this.timer.Enabled = true;
和 timer.start()
效果是一样滴
和 timer.start()
效果是一样滴
#7
它现在是连一次都不触发,timer_Elapsed里面有代码,只是我没有贴出来而已。
#8
你调试一下不就行了
#9
就是在调试状态下,发现计时器定时执行的方法没有被执行。
#10
我觉得你重写的那个 onstart 方法都没有执行
#11
你把整个源代码 发上来我给你调试一下
#12
onstart方法有执行,我断点命中了,源码就是这么多了,timer_Elapsed只是做一些输出log的工作,里面的断点没有命中
#13
你的代码我试过 可以执行到timer的事件的 没有问题 要不你就把代码贴过来看看
this.timer.AutoReset = true;
不是只执行一次 而是间隔执行 false的话是只执行一次
this.timer.AutoReset = true;
不是只执行一次 而是间隔执行 false的话是只执行一次
#14
我就需要间隔执行,我是在.net2.0下开发的,服务类型是LocalService和LocalSystem都试过了。代码如下:
private System.Timers.Timer timer;
public Service()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
Thread.Sleep(30000);
this.timer = new System.Timers.Timer(); // 这里断点,能够命中进入调试
this.timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
this.timer.Interval = 1000;
this.timer.AutoReset = true;
this.timer.Enabled = true;
//this.timer.Start();
}
/// <summary>
/// 服务停止事件
/// </summary>
protected override void OnStop()
{
this.timer.Enabled = false;
//this.timer.Stop();
}
void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
Config config = Config.GetConfig(); // 这里断点,没有进入调试
if (config.Status == Status.Start)
{
return;
}
Console.Write("OK");
}
#15
解决了,最后没有用System.Timers.Timer,改用Threading.Timer就可以了。