需要ASP.Net计时器控制

时间:2012-01-06 04:56:22

标签: asp.net

我有一个ASP.NET Web应用程序,在UI层我有一个C#类(不是asp.net页面),我想在定时器过去时使用定时器控件发送电子邮件。我将在application.start()方法中启动计时器。我想在后台设置它将继续在后台工作请建议它是否可行的解决方案?如果没有那么什么可以替代解决方案?我已经读过在Web应用程序中无法进行计时器控制,因为它是无状态环境但是我想在C#类中使用它而不是在ASP.net页面中。请提出解决方案。

由于

1 个答案:

答案 0 :(得分:0)

这对我有用。首先测试一下,知道服务器上的GC从未收集过计时器:

<强>的Web.config

<configuration>
  <system.net>
    <mailSettings>
      <smtp>
        <network defaultCredentials="false" host="mail.domain.com" password="psw" userName="user"/>
      </smtp>
    </mailSettings>
  </system.net>

<强>的Global.asax.cs

public class Global : System.Web.HttpApplication {

    Timer cron;

    protected void Application_Start(object sender, EventArgs e) {
        cron = new Timer(1000 * 60 * 5);
        cron.AutoReset = true;
        cron.Start();
        cron.Elapsed += (s, a) => {
            var address = "your@email.com";
            var mail = new MailMessage("Test <test@domain.com>", address);
            mail.Subject = "Test";
            mail.Body = "Timer test at " + DateTime.Now.ToLongTimeString();
            mail.IsBodyHtml = true;
            var smtp = new SmtpClient();
            smtp.Send(mail);
        };
    }

    protected void Application_End(object sender, EventArgs e) {
        cron.Stop();
    }
}

请注意,此解决方案以及其他解决方案(thread loopcache expiration)都很苛刻。 Windows任务计划程序旨在完成此类工作。