我用C# 写了个WindowsService 中间用到个Timer控件来控制多长时间重复执行某些事件。
现在有个问题:比方说第一次执行还没执行完就开始执行第二次了。我现在想问下Timer控件可以设置成执行完成一次后多少秒再开始执行吗?而不是现在是每隔多少秒就开始执行。谢谢大...
现在有个问题:
比方说第一次执行还没执行完就开始执行第二次了。
我现在想问下Timer控件可以设置成执行完成一次后多少秒再开始执行吗?而不是现在是每隔多少秒就开始执行。谢谢大大们了。。
我自己已经解决,谢谢大家。
在Timer 的 Elapsed 事件中
可以使用 Timer.Enabled = false 来先结束Timer的计时 等实行完成后再Timer.Enabled = true
即
timer_Elapsed()
{
Timer.Enabled = false;
// 执行任务操作.
Timer.Enabled = true;
} 展开
比方说第一次执行还没执行完就开始执行第二次了。
我现在想问下Timer控件可以设置成执行完成一次后多少秒再开始执行吗?而不是现在是每隔多少秒就开始执行。谢谢大大们了。。
我自己已经解决,谢谢大家。
在Timer 的 Elapsed 事件中
可以使用 Timer.Enabled = false 来先结束Timer的计时 等实行完成后再Timer.Enabled = true
即
timer_Elapsed()
{
Timer.Enabled = false;
// 执行任务操作.
Timer.Enabled = true;
} 展开
5个回答
展开全部
给你一个思路:
设置一个变量,bool isOpen = true;
假如每隔5秒WindowsService执行,在执行时就判断变量是否为true,如:
WindowsService.method(){
if (isOpen){
isOpen = false;
此处调用你将要执行的任务,但此调用需要返回一个值
}
}
返回一个true值重新设置isOpen这个值,因为在执行时我们将这个值设为了false,所以下次轮回的时候,如果此值不为true,则调用不执行
我给你写一个模拟程序,以供参考,因为我不知道你的代码是怎么写的,所以我就只写一个小例子
public class Test{
bool isOpen = true;
public void WindowsServiceRun() //每隔五秒WindowsService会自身调用
{
if(isOpen){
isOpen = this.DoWork();
}
}
public bool DoWork()
{
//do somethin;
try{
//如果任务顺利执行,则返回true;
return true;
}catch(Exception e){
//出现了异常,则返回false;
return false;
}
}
}
--------------------------------
以上代码是整个思路的示例,以供参考
设置一个变量,bool isOpen = true;
假如每隔5秒WindowsService执行,在执行时就判断变量是否为true,如:
WindowsService.method(){
if (isOpen){
isOpen = false;
此处调用你将要执行的任务,但此调用需要返回一个值
}
}
返回一个true值重新设置isOpen这个值,因为在执行时我们将这个值设为了false,所以下次轮回的时候,如果此值不为true,则调用不执行
我给你写一个模拟程序,以供参考,因为我不知道你的代码是怎么写的,所以我就只写一个小例子
public class Test{
bool isOpen = true;
public void WindowsServiceRun() //每隔五秒WindowsService会自身调用
{
if(isOpen){
isOpen = this.DoWork();
}
}
public bool DoWork()
{
//do somethin;
try{
//如果任务顺利执行,则返回true;
return true;
}catch(Exception e){
//出现了异常,则返回false;
return false;
}
}
}
--------------------------------
以上代码是整个思路的示例,以供参考
展开全部
用两个Timer,如Timer1和Timer2,Timer1控制程序代码执行,Timer2控制Timer1
代码大致如下,Timer1的Tick事件
Timer1.Enabled=false;
Timer2.Enabled=false;
//执行任务代码
//任务代码执行完毕
Timer2.Enabled=true;
Timer2的Tick事件:
Timer1.Enable=true;
设置好两个Timer的时间周期就可以了
代码大致如下,Timer1的Tick事件
Timer1.Enabled=false;
Timer2.Enabled=false;
//执行任务代码
//任务代码执行完毕
Timer2.Enabled=true;
Timer2的Tick事件:
Timer1.Enable=true;
设置好两个Timer的时间周期就可以了
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你看看Timer有没有WaitForExit()函数。
估计你这里要用Stopwatch
//开始运行
sw = new System.Diagnostics.Stopwatch();
sw.Start();
。。。。。
Console.WriteLine("已运行:" + sw.Elapsed.Days.ToString() + "天" + sw.Elapsed.Hours.ToString() + "小时" + sw.Elapsed.Minutes.ToString() + "分" + sw.Elapsed.Seconds.ToString() + "秒");
。。。。。
sw.Stop();
使用sw手动计算时间。
估计你这里要用Stopwatch
//开始运行
sw = new System.Diagnostics.Stopwatch();
sw.Start();
。。。。。
Console.WriteLine("已运行:" + sw.Elapsed.Days.ToString() + "天" + sw.Elapsed.Hours.ToString() + "小时" + sw.Elapsed.Minutes.ToString() + "分" + sw.Elapsed.Seconds.ToString() + "秒");
。。。。。
sw.Stop();
使用sw手动计算时间。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
好棒,下次自己也多研究下
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询