2012-02-24 1 views
2

私は1分後に実行するようにタイマーを設定したときに、WindowsサービスでSystem.Threading.Timerを使用しました。 12:00:00から開始します。この間隔system.threading.timerは機能しません

12時00分00秒 12時00分59秒 12時01分00秒 12時02分○○秒 12時02分59秒

でexcuted

timer1[timer] = 
    new System.Threading.Timer(timerDelegate, obj, dueTime, interval); 

タイマー

しかし、私は

12時00分00秒でexcuteたいです午前12時01分00秒 午前12時02分○○秒 12時03分○○秒

タイマーは午前12時〇〇分59秒で始めた理由?

iは、次のコード実行のための残りを設定している

宣言:タイマーコールバックメソッドで使用される

_interval[timer] = interval; 
_startTime[timer] = DATeTime + dueTime; 

それは完全にはなくウォーキングのWindows XPで同じアプリケーションを使用

long elapsedMs = Convert.ToInt64((dt - _startTime[timer]).TotalMilliseconds); 
long intervalMs = Convert.ToInt64(_interval[timer].TotalMilliseconds); 
long remainder = elapsedMs % intervalMs; 
if (remainder != 0L) 
{ 
    timer1[timer].Change(
     _interval[timer] - TimeSpan.FromMilliseconds(remainder), 
     _interval[timer]); 
} 

Windows 7の場合& windows server 2008が動作していません。

Threading.Timerでこの問題を解決するにはどうすればよいですか?

+1

短い答えは: 'Threading.Timer'を使わないでください。それは正確ではありません。高解像度のマルチメディアタイマーを使用する必要があります。 [この記事(http://www.codeproject.com/Articles/5501/The-Multimedia-Timer-for-the-NET-Framework)を参照してください。 – AVIDeveloper

+0

Windows XPでの動作が完全にWindows 7でない理由 – user847455

+0

Win7マシンがビジーで、WinXPがよりアイドルなのかもしれません。 WinXPマシンに多くのプロセスをオーバーロードして、ソリューションがまだ動作しているかどうかを確認することをお勧めします。マルチメディアタイマーを使用すると、それが実現します。 – AVIDeveloper

答えて

1

あなたはSystem.Timers.Timerを試してみるかもしれません - それは私にとってうまくいっています。便宜上、私はデリゲートを使って静的タイマークラスをペーストしました:

public static class Timer 
    { 
     private static System.Timers.Timer _timer = new System.Timers.Timer(); 
     public static void start(bool enabled, int interval) 
     { 
      _timer = new System.Timers.Timer(); 
      _timer.Elapsed += new ElapsedEventHandler(_timerElapsed); 
      _timer.Enabled = enabled; 
      _timer.Interval = interval; 
     } 
     static void _timerElapsed(object sender, ElapsedEventArgs e) 
     { 
      OnTimedEvent(sender, e);     
     } 
    } 
+1

'System.Timers.Timer'は内部的に' System.Threading.Timer'を使用していますので、OPが持っていた問題は解決しないと思います。 – svick

+0

なぜローカルテストでのみ動作しますか?私がporductionサーバーにデプロイするとき、これは何もしません、それはあなたのことですか? –

関連する問題