[英]creating file for every 24 hours depends on the timer
我已經做過這樣的事情...用於在晚上10點安排的每24小時執行一次backup(使用mysql的備份數據庫)功能
它還將檢查文件創建時間(backup.sql)(即),如果有任何文件未在24小時內創建,它將創建文件.....這是在backupdatabase函數中完成的...
但是它並不是每天晚上10點每天都在創建文件....
我每天晚上10點使用計時器來創建文件...
這是我的代碼......
public partial class BackupForm : Form
{
private static System.Timers.Timer _timer;
private Int32 _hours = 0;
private Int32 _runAt = 10;
public BackupForm()
{
}
private void BackupForm_Load(object sender, EventArgs e)
{
_hours = (24 - (DateTime.Now.Hour + 1)) + _runAt;
_timer = new Timer {Interval = _hours*60*60*1000};
_timer.Elapsed += new ElapsedEventHandler(Tick);
_timer.Start();
}
void Tick(object sender, ElapsedEventArgs e)
{
string hostname = MainHelper.getServer();
const string path = @"C:\folder\Access\backupdb\";
var listfiles = Directory.GetFiles(@"C:\folder\Access\backupdb\", "backup-*.zip").OrderByDescending(File.GetCreationTime).ToList();
var getfiles = new List<String>();
var files = listfiles.Select(Path.GetFileName).ToList();
var dt = DateTime.Now;
foreach(var file in files)
{
var creationtime = File.GetCreationTime(file);
var diff = DateTime.Now.Subtract(creationtime);
if(diff.Hours > 24 && diff.Days < 2 && creationtime.Month == dt.Month && creationtime.Year == dt.Year && hostname == "localhost" && _hours == 24)
{
backupDatabase();// here, i am doing backup database(creating backup.Zip file)
}
else if (_hours != 24)
{
_hours = 24;
_timer.Interval = _hours * 60 * 60 * 1000;
}
}
}
}
我不知道我錯在哪里......
我的目標是每天在給定的時間創建文件(執行backupdatabase功能),此外還要檢查文件創建時間(24小時內)
任何人都會對此有所幫助..
任何示例代碼對我在特定時間舉辦活動非常有幫助,包括24小時檢查......
提前謝謝了
在您Tick
的事件,它看起來像你需要_timer.Stop()
在該事件的開始,然后_timer.Start()
在結束復位定時器。
編輯:
步驟1:在您的BackupForm_Load
事件中,您可以通過執行以下操作來計算下一次發生的上午10:00:
var now = DateTime.Now;
var today = now.Date;
var tenAm = today.AddHours(10).AddDays(now.Hour >= 10 ? 1 : 0);
TimeSpan ts = tenAm - now;
var timeInMillisecondsTill10Am = ts.Milliseconds;
步驟2:在您的Tick
事件中,在事件開始時調用_timer.Stop()
。 然后將間隔設置為從現在開始的24小時,如下所示。 最后,在Tick
事件的最后一行之前調用_timer.Start()
以重置計時器:
var twentyFourHoursFromNow = TimeSpan.FromHours(24).TotalMilliseconds;
為什么重新發明輪子。 您可以使用Quartz.net上的企業作業調度程序。 讓Quartz.net處理計划並按時觸發作業。 在開發業務邏輯上投入寶貴的時間。
下面
void Tick(object sender, ElapsedEventArgs e)
{
add _timer.Stop();
在方法結束之前(在它的“}”之前)添加_timer.Start();
這對於腳本語言而不是Forms應用程序來說似乎是一項任務,但是......如果您使用Microsoft的Reactive Extensions庫,則可以真正簡化代碼。
Observable.Interval(TimeSpan.FromHours(24)).Subscribe(x => DoBackup());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.