System.Timers.Timerオブジェクトに問題があります。私は定期的な間隔でタスクを実行するためにタイマーオブジェクトを使用します。タイマーのコンストラクタでは、仕事をやっているメソッド(DoTimeCheck())を呼び出して、起動時にタスクが一度実行されるようにします。作業は(定期的に)BackgroundWorkerで行われます。System.Timers.Timer遅延がアプリケーションをハングする
私はこれでタイマーを呼び出す:
UpdaterTimer ut = UpdaterTimer.UpdaterTimerInstance;
私の問題は、私は3分(アプリケーションの起動時に実行される1)でタスクの最初の実行を遅らせる必要があるということです。後続の実行(Elapsedイベント)は遅滞なく実行する必要があります。
System.Threading.Thread.Sleep(TimeToDelayFirstRunInMiliseconds);
でも、アプリのUI(メインスレッド)が使用できなくなるため、これは失敗します。どのように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()内のコードとは別に、関連クラス全体がはいです。すべての統計は、ただ1つのタイマーが実行されることを確実にすることになっています - シングルトン。もちろん、これはSystem.Timers.Timer(私はnewbです)から継承する最善の方法ではないかもしれませんが、それまでのところ動作しています。 –