【问题标题】:Function in System.Threading.TimerCallback is not workingSystem.Threading.TimerCallback 中的函数不起作用
【发布时间】:2017-05-04 19:11:53
【问题描述】:

我正在尝试每天在特定时间发送一封电子邮件, 但似乎 System.Threading.TimerCallback 中的函数(void SomeMethodRunsAtSpecificTime(object o)) 不起作用。

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
    double TimeOfExecution = 14;
    DateTime now = DateTime.Now;
    DateTime today7am = now.Date.AddHours(TimeOfExecution);
    DateTime next7am = now <= today7am ? today7am : today7am.AddDays(1);

    System.Threading.TimerCallback callback = new 
    System.Threading.TimerCallback(SomeMethodRunsAtSpecificTime);

    var timer1 = new System.Threading.Timer(callback, null, next7am - DateTime.Now, TimeSpan.FromHours(24));

}



void SomeMethodRunsAtSpecificTime(object o)
{

    //Sending email from someone to someone(this function has no problem)
 }

【问题讨论】:

    标签: c# asp.net multithreading timer


    【解决方案1】:

    一旦Page_Load 执行完毕,Timer 就会超出范围。这与您在该方法中声明 int 相同。一旦方法执行完毕,int 去哪里了?无处。它消失了。

    即使您将Timer 设为页面的属性(_Default 类)也是如此。创建整个类只是为了生成响应(HTML 页面),然后它也超出范围,并带走了它的成员变量。

    Web 应用程序并不是定期做某事的好工具。它的目的是在请求进入时对其进行响应。当没有请求时,应用程序除了等待请求之外什么都不做。如果一段时间内没有人向站点发送请求,整个应用程序甚至会关闭,而 IIS 稍后会在请求到来时启动它。

    要定期执行某项操作,您可能需要 Windows 服务甚至计划任务。

    【讨论】:

    • 那么,有没有办法在Web应用程序中使用System.Threading.TimerCallback?那么如何使用计划任务或 Windows 服务..?
    • 我不会说“不可能”,只是没有任何可预测或可靠的说法。至于其他两个,用谷歌搜索可能更容易。
    • 知道了!谢谢你的帮助!!
    猜你喜欢
    • 2017-12-01
    • 2013-12-03
    • 2021-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多