C/s,B/s中timer定时生成文档问题,高手进
用相同的定时生成文件代码,在C/S程序中运行正常分别调用生成Word,Execl方法各生成一个文档,但是转移到B/S程序后发现在定时时间的一分钟内生成了多个Word,Execl文档(每隔几秒生成一个),不理解这是为什么?高手请指点C/s windows窗体load事件
private void DoWord_Load(object sender, EventArgs e)
{
System.Timers.Timer aTimer = new System.Timers.Timer();
aTimer.Elapsed += new ElapsedEventHandler(TimeEvent);
// 设置引发时间的时间间隔 此处设置为1秒(1000毫秒)
aTimer.Interval = 1000;
aTimer.Enabled = true;
}
}
//判断定时时间
private void TimeEvent(object source, ElapsedEventArgs e)
{
// 得到 hour minute second 如果等于某个值就开始执行某个程序。
int intHour = e.SignalTime.Hour;
int intMinute = e.SignalTime.Minute;
int intSecond = e.SignalTime.Second;
if (intHour == iHour && intMinute == iMinute && intSecond == iSecond)
{
//启动线程生成文档
Thread threadword = new Thread(new ThreadStart((MakeWord)));
Thread threadexecl = new Thread(new ThreadStart(MakeExecl));
//MakeWord()生成一个word文档
//MakeExecl()生成一个Execl文档
threadword.Start();
threadword.Join();
threadexecl.Start();
threadexecl.Join();
MessageBox.Show("文档生成已完成!");
}
}
B/S程序 Timer事件
protected void Timer1_Tick1(object sender, EventArgs e)
{
// 得到 hour minute second 如果等于某个值就开始执行某个程序。
int intHour = DateTime.Now.Hour;
int intMinute = DateTime.Now.Minute;
int intSecond = DateTime.Now.Second;
if (intHour == iHour & intMinute == iMinute & intSecond == iSecond)
{
aTimer.Elapsed += new ElapsedEventHandler(TimeEvent);
// // 设置引发时间的时间间隔 此处设置为1秒(1000毫秒)
aTimer.Interval = 1000;
aTimer.Enabled = true;
aTimer.Start();
aTimer.AutoReset = true;
}
}
//判断定时时间
private void TimeEvent(object source, ElapsedEventArgs e)
{
//启动线程生成文档
Thread threadword = new Thread(new ThreadStart(MakeWord));
Thread threadexecl = new Thread(new ThreadStart(MakeExecl));
threadword.Start();
threadword.Join();
threadexecl.Start();
threadexecl.Join();
LabMessage.Text = "文档生成已完成!";
} --------------------编程问答-------------------- 你需要放在Global里,放在,放在页面中,多人同时访问就会有问题
参见例子
http://blog.csdn.net/net_lover/archive/2003/08/27/6943.aspx --------------------编程问答--------------------
protected void Timer1_Tick1(object sender, EventArgs e)
{
// 得到 hour minute second 如果等于某个值就开始执行某个程序。
int intHour = DateTime.Now.Hour;
int intMinute = DateTime.Now.Minute;
int intSecond = DateTime.Now.Second;
if (intHour == iHour & intMinute == iMinute & intSecond == iSecond)
{
aTimer.Elapsed += new ElapsedEventHandler(TimeEvent);
// // 设置引发时间的时间间隔 此处设置为1秒(1000毫秒)
aTimer.Interval = 1000;
aTimer.Enabled = true;
aTimer.Start();
aTimer.AutoReset = true;
}
}
这里有问题,tick方法每1秒执行一次 --------------------编程问答-------------------- 写在页面里面,每回发一次就执行一次,当然会有问题了
写在应用程序级别的启动事件里面 --------------------编程问答--------------------
+ --------------------编程问答-------------------- Global里 我按B/s程序的方式做过一遍 仍然出现生成多个文档的问题 --------------------编程问答-------------------- 不懂,继续看
--------------------编程问答--------------------
protected void Application_Start(object sender, EventArgs e)
{
//定时器,长时间没有人访问系统,线程会死掉的,解决方法有多种,可以将定时器用于桌面程序,
//或者有WEB服务器上打开一个页面,定时刷新,比如半个小时刷新一次
System.Timers.Timer objTimer = new System.Timers.Timer();
objTimer.Interval = 1000 * 60 * 60;//这个时间单位毫秒 每小时检查一次
objTimer.Enabled = true;
objTimer.Elapsed += new ElapsedEventHandler(objTimer_Elapsed);
}
void objTimer_Elapsed(object sender, ElapsedEventArgs e)
{
//throw new NotImplementedException();
//定时器要处理的事件
}
补充:.NET技术 , ASP.NET