比如,我早上8:30启动程序,在这一时刻Timer做一次操作,然后在9:00,10:00,11:00,12:00 等等,都做一次操作。
我之前代码如下,我是用Interval=3600000,这样也只是从启动程序时,让后退1小时而已。
public FormMain()
{
InitializeComponent();
Timer1.Start();
}
private void Timer1_Tick(object sender, EventArgs e)
{
do();
Timer1.Interval = 3600000;
}
请问各位C# 大神,如何解决这个问题啊。。。
C# 新手跪谢!!!
10 个解决方案
#2
public FormMain()
{
InitializeComponent();
this.Init_Timer();
Timer1.Start();
}
private Timer Timer1 = new Timer();
private void Timer1_Tick(object sender, EventArgs e)
{
Timer1.Interval = 3600000;
Timer1.Tick += new EventHandler(do);
}
{
InitializeComponent();
this.Init_Timer();
Timer1.Start();
}
private Timer Timer1 = new Timer();
private void Timer1_Tick(object sender, EventArgs e)
{
Timer1.Interval = 3600000;
Timer1.Tick += new EventHandler(do);
}
#3
设置个变量
int OldHour;
判断
if(datetime.now.hour!=OldHour)
{
OldHour=datetime.now.hour;
//这里写你的代码
}
int OldHour;
判断
if(datetime.now.hour!=OldHour)
{
OldHour=datetime.now.hour;
//这里写你的代码
}
#4
你可以设两个timer,第一个timer间隔一分钟那样子用于计算当前时间到整点数,第二个timer时间间隔一小时用于你的程序真正的整点数时运行。
程序刚开始运行的时候,启动的时候可能是任意时间,这时你先运行第一个timer,判断当前时间是不是整点,不是的话一分钟之后继续判断,当到达整点数时候,第一个timer stop掉,然后开始start第二个timer即可。
或者如果你的是想让一个程序在整点数时执行的话不用timer直接用windows的任务计划好了。
程序刚开始运行的时候,启动的时候可能是任意时间,这时你先运行第一个timer,判断当前时间是不是整点,不是的话一分钟之后继续判断,当到达整点数时候,第一个timer stop掉,然后开始start第二个timer即可。
或者如果你的是想让一个程序在整点数时执行的话不用timer直接用windows的任务计划好了。
#5
将timer的interval设置小一点,一分钟左右
然后在tick里判断当前系统时间,是否是整点
是,就执行你的代码
然后在tick里判断当前系统时间,是否是整点
是,就执行你的代码
#6
void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
try
{
DateTime time = e.SignalTime;
//每天的10:50干活
if (time.Hour == 10 && time.Minute == 50 && time.Second == 0)
{
//DoSomething
}
}
catch
{
throw;
}
}
请参考
{
try
{
DateTime time = e.SignalTime;
//每天的10:50干活
if (time.Hour == 10 && time.Minute == 50 && time.Second == 0)
{
//DoSomething
}
}
catch
{
throw;
}
}
请参考
#7
做成windows服务把
#8
public FormMain()
{
InitializeComponent();
Timer1.Interval = 3600000;
Timer1.Start();
}
private void Timer1_Tick(object sender, EventArgs e)
{
if( (long)DateTime.Now.TimeOfDay.TotalSeconds % 3600 == 0)
{
//do some
}
}
#9
bool isFirst = true;
public FormMain()
{
InitializeComponent();
Timer1.Start();
Timer1.Interval = 60000;
do();
}
private void Timer1_Tick(object sender, EventArgs e)
{
do();
}
private void do()
{
bool canDo = false;
if(isFirst)
{
canDo = true;
isFirst = false;
}
else
{
Datetime cDate = Datetime.Now;
if(cDate.Minutes == 0)
{
canDo = true;
}
}
if(!canDo) return;
//do something
}
#10
之前正好有一个类似的例子,不过是Winform中的timer,不过原理相似
private System.Windows.Forms.Timer time1 = new System.Windows.Forms.Timer();
public Form1()
{
InitializeComponent();
//do something
//计算到下一个整点还有多少时间
time1.Interval = 60 * 60 * 1000 - DateTime.Now.Minute * 60000 - DateTime.Now.Second * 1000 - DateTime.Now.Millisecond;
time1.Tick += new EventHandler(DoSomething);
time1.Start();
}
private void DoSomething(Object myObject, EventArgs myEventArgs)
{
//你想做的事
time1.Interval = 60000;
}
#1
#2
public FormMain()
{
InitializeComponent();
this.Init_Timer();
Timer1.Start();
}
private Timer Timer1 = new Timer();
private void Timer1_Tick(object sender, EventArgs e)
{
Timer1.Interval = 3600000;
Timer1.Tick += new EventHandler(do);
}
{
InitializeComponent();
this.Init_Timer();
Timer1.Start();
}
private Timer Timer1 = new Timer();
private void Timer1_Tick(object sender, EventArgs e)
{
Timer1.Interval = 3600000;
Timer1.Tick += new EventHandler(do);
}
#3
设置个变量
int OldHour;
判断
if(datetime.now.hour!=OldHour)
{
OldHour=datetime.now.hour;
//这里写你的代码
}
int OldHour;
判断
if(datetime.now.hour!=OldHour)
{
OldHour=datetime.now.hour;
//这里写你的代码
}
#4
你可以设两个timer,第一个timer间隔一分钟那样子用于计算当前时间到整点数,第二个timer时间间隔一小时用于你的程序真正的整点数时运行。
程序刚开始运行的时候,启动的时候可能是任意时间,这时你先运行第一个timer,判断当前时间是不是整点,不是的话一分钟之后继续判断,当到达整点数时候,第一个timer stop掉,然后开始start第二个timer即可。
或者如果你的是想让一个程序在整点数时执行的话不用timer直接用windows的任务计划好了。
程序刚开始运行的时候,启动的时候可能是任意时间,这时你先运行第一个timer,判断当前时间是不是整点,不是的话一分钟之后继续判断,当到达整点数时候,第一个timer stop掉,然后开始start第二个timer即可。
或者如果你的是想让一个程序在整点数时执行的话不用timer直接用windows的任务计划好了。
#5
将timer的interval设置小一点,一分钟左右
然后在tick里判断当前系统时间,是否是整点
是,就执行你的代码
然后在tick里判断当前系统时间,是否是整点
是,就执行你的代码
#6
void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
try
{
DateTime time = e.SignalTime;
//每天的10:50干活
if (time.Hour == 10 && time.Minute == 50 && time.Second == 0)
{
//DoSomething
}
}
catch
{
throw;
}
}
请参考
{
try
{
DateTime time = e.SignalTime;
//每天的10:50干活
if (time.Hour == 10 && time.Minute == 50 && time.Second == 0)
{
//DoSomething
}
}
catch
{
throw;
}
}
请参考
#7
做成windows服务把
#8
public FormMain()
{
InitializeComponent();
Timer1.Interval = 3600000;
Timer1.Start();
}
private void Timer1_Tick(object sender, EventArgs e)
{
if( (long)DateTime.Now.TimeOfDay.TotalSeconds % 3600 == 0)
{
//do some
}
}
#9
bool isFirst = true;
public FormMain()
{
InitializeComponent();
Timer1.Start();
Timer1.Interval = 60000;
do();
}
private void Timer1_Tick(object sender, EventArgs e)
{
do();
}
private void do()
{
bool canDo = false;
if(isFirst)
{
canDo = true;
isFirst = false;
}
else
{
Datetime cDate = Datetime.Now;
if(cDate.Minutes == 0)
{
canDo = true;
}
}
if(!canDo) return;
//do something
}
#10
之前正好有一个类似的例子,不过是Winform中的timer,不过原理相似
private System.Windows.Forms.Timer time1 = new System.Windows.Forms.Timer();
public Form1()
{
InitializeComponent();
//do something
//计算到下一个整点还有多少时间
time1.Interval = 60 * 60 * 1000 - DateTime.Now.Minute * 60000 - DateTime.Now.Second * 1000 - DateTime.Now.Millisecond;
time1.Tick += new EventHandler(DoSomething);
time1.Start();
}
private void DoSomething(Object myObject, EventArgs myEventArgs)
{
//你想做的事
time1.Interval = 60000;
}