2009-03-22 7 views

Antwort

2

Ich sehe nicht, wie Sie jede Berechnung zu tun haben:

public void StartTimer(DateTime target) { 
    double msec = (target - DateTime.Now).TotalMilliseconds; 
    if (msec <= 0 || msec > int.MaxValue) throw new ArgumentOutOfRangeException(); 
    timer1.Interval = (int)msec; 
    timer1.Enabled = true; 
} 
+0

das ist im Grunde, was ich getan habe. Vielen Dank! –

0

Wenn Sie ASP.NET verwenden, können Sie möglicherweise ein leeres Objekt mit einem deklarierten ExpirationDate in den Cache einfügen und dann die CacheItemRemovedCallback behandeln. Nur ein Gedanke, weiß nicht, ob es für dich arbeiten wird.

Wenn Sie nicht ASP.NET verwenden Sie immer noch in der Lage sein, diesen Trick mit einem anderen Caching-Framework verwenden wie die Enterprise Library Caching Block

+0

Ja, ich denke, das ist komplizierter/hacky als nur einen Timer zu verwenden und das Intervall zu berechnen :) Netter Gedanke, obwohl. –

+0

@ löffel16, stimmte zu, dass es keine Technik war, die ich jemals benutzt habe oder brauchte, aber ich habe irgendwo davon gehört. – bendewey

0

Nicht, dass ich wüsste. Ich habe meine eigene Klasse gerollt, um das zu tun.

1

Ich mag:

System.Timers.Timer _WaitForScheduledTime; 
_WaitForScheduledTime = new System.Timers.Timer(); 
_WaitForScheduledTime.Elapsed += new ElapsedEventHandler(WaitForScheduledTime_OnElapsed); 
_WaitForScheduledTime.Interval = _ListOfJobs.IntervalUntilFirstJobIsToRun().TotalMilliseconds; 
_WaitForScheduledTime.Start(); 

...

private void WaitForScheduledTime_OnElapsed(object source, EventArgs e) 
{ 
    log.Debug("Ready to run at least one job"); 

    // restart the timer 
    _WaitForScheduledTime.Interval = _ListOfJobs.IntervalUntilFirstJobIsToRun().TotalMilliseconds; 
    _WaitForScheduledTime.Start(); 
} 
Verwandte Themen