Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在ASP.NET中为常规事件使用C#计时器_C#_Asp.net_Timer - Fatal编程技术网

在ASP.NET中为常规事件使用C#计时器

在ASP.NET中为常规事件使用C#计时器,c#,asp.net,timer,C#,Asp.net,Timer,我正在使用一个ASP网站,它要求每x、y和z分钟发送一封“提醒”电子邮件。我曾尝试在事件发生时启动计时器(如按钮单击或页面加载),但这被证明是不可靠的,因为当服务器执行自动备份或更新aspx.cs文件时,计时器将被丢弃 我的新想法是让计时器持续运行(在页面加载上执行检查以确保其运行),当它经过时,它检查是否经过x、y或z分钟。因此,如果y过期,它需要发送一封“提醒”电子邮件,然后重新启动y的计时器 void ParentTimer_Elapsed(object sender, ElapsedEv

我正在使用一个ASP网站,它要求每x、y和z分钟发送一封“提醒”电子邮件。我曾尝试在事件发生时启动计时器(如按钮单击或页面加载),但这被证明是不可靠的,因为当服务器执行自动备份或更新aspx.cs文件时,计时器将被丢弃

我的新想法是让计时器持续运行(在页面加载上执行检查以确保其运行),当它经过时,它检查是否经过x、y或z分钟。因此,如果y过期,它需要发送一封“提醒”电子邮件,然后重新启动y的计时器

void ParentTimer_Elapsed(object sender, ElapsedEventArgs e)
{
    foreach(Timer childTimer in ChildTimerList)
    {
        if(childTimer.Enabled == false) // And therefore has elapsed
        {
            sendReminderEmail(childTimer);
            childTimer = checkAndSetCorrectInterval(childTimer);
            childTimer.AutoReset = false;
            childTimer.Enabled = true;
        }
    }
}
列表ChildTimerList显然包含x、y和z

有谁能预见到我在这方面遇到了什么问题,或者有没有更好的方法来解决?我的完美解决方案是一个昂贵运行的计时器,它不需要在事件发生时启动,但我认为这在ASP中是不可能的

此外,我应该在哪里初始化父计时器和子列表变量?在App_Code文件夹中的类中,或者静态地在代码隐藏的aspx.cs页面中

提前谢谢

编辑:


是的,我的意思是ASP.NET…:)

我可能会使用一个简单的控制台应用程序(负责发送电子邮件)和Windows中的任务调度器(负责按计划运行应用程序)来实现这一点。保持简单。而且健壮


编辑:如果您控制服务器-在共享主机环境中,它可能不是最好的解决方案,您只能运行web应用程序。

我可能会使用一个简单的控制台应用程序(负责发送电子邮件)和Windows中的任务计划程序来实现这一点(负责按计划运行应用程序)。保持简单、健壮


编辑:如果你能控制服务器-在共享主机环境中,这可能不是最好的解决方案,因为在共享主机环境中,你只能运行web应用程序。

+1,为此使用一个服务,只需让ASP.NET与之通信。Windows服务非常适合这种情况-无需登录服务器即可工作NKS为那些家伙。我会考虑一个更好的方法。你能提供任何材料,所以我可以阅读更多关于你的建议?+ 1,使用一个服务,让ASP.NET与它沟通。Windows服务是理想的这样的事情-不必登录到服务器让它工作。谢谢那些家伙。我会考虑一个更好的。方法。你有什么材料可以提供给我,让我可以阅读更多关于你建议的内容吗?@giddy ASP with C#不可能是经典的ASP,所以唯一的意思是ASP.NET:)@shadow是的,我在点击编辑之前检查过,因为我只浏览了一下问题,然后有人已经编辑过了。所以是如此快的节奏!:)@令人眩晕的是,有人就是我@带C#的眩晕ASP不可能是经典ASP,所以唯一的意思是ASP.NET:)@shadow是的,我在点击编辑之前检查过,因为我只浏览了一下问题,然后有人已经编辑过了。所以是如此快的节奏!:)@令人眩晕的是,有人就是我