首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C#中特定时间启动函数

在C#中特定时间启动函数
EN

Stack Overflow用户
提问于 2016-10-27 12:43:21
回答 2查看 5.4K关注 0票数 1

我正在做一个c# Winform应用程序,它自动发送两种类型的电子邮件:

第一组邮件必须只在星期一(每周)发送,在上午9点,第二组电子邮件必须仅在每个月的第一天(每月)。

目前我正在做这个

代码语言:javascript
复制
if (day_event == "monday" && DateTime.Now.Hour.ToString() == heuresortiehebdo)
{
    //starting first group of mails
}                    
else if(DateTime.Now.Day==1 && DateTime.Now.Hour.ToString() == heuresortiemensuels)
{
     //starting 2nd group of mails
} 

(heuresortiehebdo和heuresortiemensuels是从APP.config文件中设置的变量,是发送每组邮件的时间设置)

因此,这个解决方案可以工作1次,但目标是让应用程序打开,永不停止,在时间和时间的时候自动发送邮件。我曾经想过线程,但是如何每次检查是否是好的一天和好的时刻?而不使用windows任务调度程序。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-27 13:19:04

你可以做这样的事。在这里,我们使用计时器来完成程序的调度部分。您可以在windows服务中使用这一点,以使程序更有效。但是如果这不是你想要的,你仍然可以在你的winforms应用程序中使用这个。

代码语言:javascript
复制
public class EmailScheduler : IDisposable
{
    private readonly Timer clock;

    public EmailScheduler()
    {
        clock = new Timer();
        clock.Interval = 1000; // runs every second just like a normal clock            
    }       

    public void Start()
    {
        clock.Elapsed += Clock_Elapsed;
        this.clock.Start();
    }

    public void Stop()
    {
        clock.Elapsed -= Clock_Elapsed;
        this.clock.Stop();
    }

    private void Clock_Elapsed(object sender, ElapsedEventArgs e)
    {
        var now = DateTime.Now;

        // Here we check 9:00.000 to 9:00.999 AM. Because clock runs every 1000ms, it should run the schedule
        if (now.DayOfWeek == DayOfWeek.Monday && 
            (now.TimeOfDay >= new TimeSpan(0, 9, 0, 0, 0) && now.TimeOfDay <= new TimeSpan(0, 9, 0, 0, 999)))
        {
            // 9 AM schedule
        }

        if(now.Date.Day == 1 &&
            (now.TimeOfDay >= new TimeSpan(0, 9, 0, 0, 0) && now.TimeOfDay <= new TimeSpan(0, 9, 0, 0, 999)))
        {
            // 1 day of the month at 9AM
        }
    }

    public void Dispose()
    {
        if (this.clock != null)
        {
            this.clock.Dispose();
        }
    }
}

要启动调度程序,您可以在您的表单中执行类似的操作。

代码语言:javascript
复制
   private EmailScheduler scheduler;
   public void FormLoad()
   {
       scheduler =  new EmailScheduler();
       scheduler.Start();
   }

   public void FormUnload()
   {
       scheduler.Stop();
       scheduler.Dispose();
   }
票数 0
EN

Stack Overflow用户

发布于 2018-09-21 15:42:20

使用将其自动化。如果应用程序每天只做一件事,那么就没有理由占用系统资源,让它不断地运行。

现在,你在管理要发送的电子邮件时遇到了问题。有几种方法可以解决这个问题。

选项1是构建一个小型前端,它执行存储在某个共享配置空间或数据库中的必要配置选项。

选项2(以及我要做的)是让应用程序启动通常进入接口模式,以允许配置工作,并手动发送电子邮件。但还提供一个参数,可以通过命令行(或计划任务的参数选项)传入,该命令行根据上次保存的配置发送电子邮件,如果需要,甚至发送特定的配置。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40284899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档