当前位置: 代码迷 >> ASP.NET >> 关于Application_Start,该如何处理
  详细解决方案

关于Application_Start,该如何处理

热度:3620   发布时间:2013-02-25 00:00:00.0
关于Application_Start
各位好!
我现在有一个问题想向大家请教下,具体内容如下:
我在网站程序的Global.asax文件的Application_Start事件中启用了一个新的线程,这个线程的作用就是每隔固定的时间,例如30秒,就会自动从POP3服务器接收并进行相应的处理,当网站部署后,是不是有客户端访问这个网站时线程就会自动启动(当然是启动一次)。现在的问题是:这个线程启动后会停止吗?例如,如果长时间没有客户端请求,还有我如果想手动停止它的话该怎么做呢?

我启动的线程的代码大致如下:
public void StartReceiveEmailsFromPOP3Server()
  {
object[] parameters = new object[] { HttpContext.Current };
  ParameterizedThreadStart pts = new ParameterizedThreadStart(ReceiveEmails);
  Thread thread = new Thread(pts);
  thread.Name = "ReceiveEmails";
  thread.Priority = ThreadPriority.BelowNormal;
  thread.Start(parameters);

ReceiveEmails是一个循环从POP3服务器获取邮件并处理的程序
Application_Start方法中会调用StartReceiveEmailsFromPOP3Server这个方法。

这个问题比较重要,我现在考虑是使用windows服务还是在网站程序中使用线程,在此先谢谢各位了!

------解决方案--------------------------------------------------------
定义全局的定时器
C# code
     public class Global : System.Web.HttpApplication    {        public static Timer gtimer = null; // 定义全局定时器类对象        protected void Application_Start(object sender, EventArgs e)        {            gtimer = new Timer(1000000); //16.7分钟执行一次方法            // 将自定义用户函数(TimerEventFunction)指定为计时器的 Elapsed 事件处理程序            // TimerEventFunction 可以写入自己的需要执行的代码逻辑            gtimer.Elapsed += new System.Timers.ElapsedEventHandler(this.TimerEventFunction);            // AutoReset 属性为 true 时,每隔指定时间间隔触发一次事件            // 若赋值 false,则只执行一次            gtimer.AutoReset = true;            gtimer.Enabled = true;        }        protected void TimerEventFunction(Object sender, ElapsedEventArgs e)        {           //触发事件,相应的操作!        }    }
------解决方案--------------------------------------------------------
据说时间长了没有访问的情况下会停止的,这种定时的东西最好用window 服务的