当前位置:编程学习 > C#/ASP.NET >>

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秒执行一次 --------------------编程问答-------------------- 写在页面里面,每回发一次就执行一次,当然会有问题了

写在应用程序级别的启动事件里面 --------------------编程问答--------------------
引用 3 楼 shalen520 的回复:
写在页面里面,每回发一次就执行一次,当然会有问题了

写在应用程序级别的启动事件里面

+ --------------------编程问答-------------------- Global里 我按B/s程序的方式做过一遍 仍然出现生成多个文档的问题 --------------------编程问答-------------------- 不懂,继续看
--------------------编程问答--------------------
引用 5 楼 xhui1008 的回复:
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
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,