我有System.Timers.Timer對象的問題。我使用計時器對象來定期執行任務。在計時器構造函數中,我調用執行該工作的方法(DoTimeCheck()),以確保任務在啓動時也運行一次。工作(定期)在BackgroundWorker中完成。System.Timers.Timer延遲掛起應用程序
我叫計時器本:
UpdaterTimer ut = UpdaterTimer.UpdaterTimerInstance;
我的問題是,我需要用延時3分鐘(運行在應用程序啓動的)任務的第一次運行。後續運行(Elapsed事件)應該立即運行。我想這樣做的,通過調用
System.Threading.Thread.Sleep(TimeToDelayFirstRunInMiliseconds);
,但失敗了,因爲它也掛起應用程序(主線程)的使其無法使用的UI。如何延遲第一次運行DoTimeCheck()而不掛用戶界面? 定時器的代碼如下。如果問題沒有以清晰的方式呈現,請讓我知道,我會編輯。先謝謝你。
public sealed class UpdaterTimer : Timer
{
private static readonly UpdaterTimer _timer = new UpdaterTimer();
public static UpdaterTimer UpdaterTimerInstance
{
get { return _timer; }
}
static UpdaterTimer()
{
_timer.AutoReset = true;
_timer.Interval = Utils.TimeBetweenChecksInMiliseconds;
_timer.Elapsed += new ElapsedEventHandler(_timer_Elapsed);
_timer.Start();
DoTimeCheck();
}
static void _timer_Elapsed(object sender, ElapsedEventArgs e)
{
DoTimeCheck();
}
private static void DoTimeCheck()
{
//... work here
}
}
這是整個班級嗎?(只是好奇於從所有靜態方法繼承Timer) –
感謝您的評論 - 除了DoTimeCheck()內部的代碼之外,這是相關的整個類是的。所有的靜態都應該確保只有一個定時器運行 - 一個單身。當然,這可能不是從System.Timers.Timer繼承的最好方式(我是一個newb),但它已經工作到目前爲止。 –