网络技术知识
c#定时运行程序分享(定时程序)
下面我会为你详细讲解“C#定时运行程序分享(定时程序)”的完整攻略:
定时运行程序的思路
- 获取当前时间,判断是否到达指定时间
- 如果是指定时间,则执行程序
- 如果不是指定时间,则等待下一次检查
开发步骤
步骤一:添加引用
在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
组件定时执行发送邮件的操作。在每个周期内,程序检查未发送的邮件,并尝试将它们发送出去。
这些就是我为你准备的两个示例,希望对您有所帮助。