c#定时运行程序分享(定时程序)

下面我会为你详细讲解“C#定时运行程序分享(定时程序)”的完整攻略:

定时运行程序的思路

  1. 获取当前时间,判断是否到达指定时间
  2. 如果是指定时间,则执行程序
  3. 如果不是指定时间,则等待下一次检查

开发步骤

步骤一:添加引用

在Visual Studio的Solution Explorer中,右键单击项目名称,然后选择“添加引用”。

在“添加引用”对话框中,选择“System.Timers”。

点击“确定”按钮进行添加。

步骤二:编写代码

下面是一个简单的示例代码,它将在每隔10秒钟执行一次:

using System;
using System.Timers;

class Program
{
    static void Main()
    {
        var timer = new Timer(10000);
        timer.Elapsed += OnTimedEvent;
        timer.Start();

        Console.WriteLine("按任意键退出...");
        Console.ReadKey(true);
    }

    static void OnTimedEvent(Object source, ElapsedEventArgs e)
    {
        Console.WriteLine("定时运行程序");
    }
}

步骤三:运行程序

编译并运行程序,您将看到每10秒钟一次的输出。

示例一:定时备份数据库

下面是一个示例代码,它将每天晚上10点备份数据库:

using System;
using System.IO;
using System.Timers;

class Program
{
    static void Main()
    {
        var now = DateTime.Now;
        var timeToBackup = new DateTime(now.Year, now.Month, now.Day, 22, 0, 0);

        var timer = new Timer(1 * 60 * 60 * 1000);
        timer.Enabled = false;
        timer.Elapsed += (_, __) => BackupDatabase();
        timer.Start();

        Console.WriteLine("按任意键退出...");
        Console.ReadKey(true);
    }

    static void BackupDatabase()
    {
        var backupPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "backup");
        var fileName = DateTime.Now.ToString("yyyyMMdd_HHmmss") + ".bak";
        var backupFilePath = Path.Combine(backupPath, fileName);

        // TODO: 备份数据库的代码

        Console.WriteLine("备份数据库完成");
    }
}

该程序在程序启动时计算出备份的时间,并使用System.Timers.Timer组件定时执行备份操作。

示例二:定时发送邮件

下面是另一个示例代码,它将每小时检查一次未发送邮件的消息,并尝试发送它们。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Mail;
using System.Timers;

class Program
{
    static void Main()
    {
        var timer = new Timer(60 * 60 * 1000);
        timer.Enabled = false;
        timer.Elapsed += (_, __) => SendEmails();
        timer.Start();

        Console.WriteLine("按任意键退出...");
        Console.ReadKey(true);
    }

    static void SendEmails()
    {
        var messages = GetUnsentMessages();

        if (messages.Any())
        {
            SendMessages(messages);
        }
    }

    static List<MailMessage> GetUnsentMessages()
    {
        // TODO: 获取未发送的邮件

        return new List<MailMessage>();
    }

    static void SendMessages(IEnumerable<MailMessage> messages)
    {
        var smtpClient = new SmtpClient("smtp.server.com");
        smtpClient.Credentials = new NetworkCredential("username", "password");

        foreach (var message in messages)
        {
            smtpClient.Send(message);
        }
    }
}

该程序使用System.Timers.Timer组件定时执行发送邮件的操作。在每个周期内,程序检查未发送的邮件,并尝试将它们发送出去。

这些就是我为你准备的两个示例,希望对您有所帮助。

营销型网站