[英]Timer thread for backing up
如果我想每隔5分鍾將某項保存到我的數據庫中,並且我決定為此使用一個單獨的線程(如果有更好的方法,請告訴我),那會更好:
只需創建線程並將其保持睡眠狀態5分鍾,然后使其調用保存功能,然后再次睡眠即可。 要么
如果可能的話,請利用Timer類(我沒有做過很多檢查)並對其進行某種倒計時,而在時間結束時,調用Save函數,然后再次開始倒計時。 要么
其他方式
PS:如果您願意,可以提供代碼示例。
我建議使用System.Threading.Timer
。
在類中添加一個類型為System.Threading.Timer
的字段:
private System.Threading.Timer _timer;
然后在您的類的構造函數中對其進行初始化:
_timer = new Timer
(
onSave,
null, // State; not used.
TimeSpan.FromMinutes(5),
TimeSpan.FromMinutes(5)
);
然后添加一個onSave()
並將您的保存邏輯放入其中:
private void onSave(object state)
{
// Handle your save here.
}
您不希望僅每五分鍾就為一次回調而刻錄整個線程。
使用計時器的另一個好處是,當程序要關閉(或出於任何其他原因)時,取消計時器要容易得多。 如果您有一個線程位於Sleep()中,那么取消Sleep()並不容易!
要停止運行計時器,只需執行以下操作:
_timer.Change(-1, -1);
要重新開始:
_timer.Change(TimeSpan.FromMinutes(5), TimeSpan.FromMinutes(5));
有關更多詳細信息,請參閱System.Threading.Timer
的文檔 。
需要注意的一件事是,對onSave()
的調用是否花費的時間超過了計時器時間。 在這種情況下,您可能想在onSave()
的開頭禁用計時器(通過調用_timer.Change(-1, -1);
),然后在末尾重新啟用計時器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.