2012-03-30 5 views
0

私はタイマーを持っていますが、メインスレッドで何かが発生して無効になるまでは、自分自身のスレッドで無期限に仕事をしています。その場合、別のスレッドが有効になります。これは完全に機能します。唯一の問題は、2番目のタイマーが長時間実行されないことを完全に確認したいということです。C#System.Timers.Timer自動シャットダウン?

何らかの不具合により特定のシャットダウンコマンドが受信されないと、たとえば10分後に自動的にタイマーを無効にする方法はありますか?

このクラスにはInitializeLifetimeServiceメソッドがあります。それは助けることができるように聞こえるが、私はそれをどのように動作させるか分からない。

みんなありがとうとギャル:)

答えて

1

あなたは与えられた時間の後に、それを無効にするために第2の1を起動したときに第3のタイマを開始することを検討してください。

 Timer t1 = new Timer(1000); // fire every second 
     Timer t2 = new Timer(60000); // fire after 10 minutes 
     t2.Elapsed += (o, e) => t1.Stop(); // disable timer 1 when timer 2 is elapsed 

     t1.Start(); 
     t2.Start(); 

上記の例では、方法によってでSystem.Timers.Timerを利用します。あなたはSystem.Threading.Timerを使用している場合には、驚くべきことにでSystem.Timers.Timerのためにそこにもスイッチを検討するかもしれない本質的にスレッドセーフなものである。ここで、System.Threading.Timerではありません。

かなり良い概要はここで見つけることができます:明確にするため http://msdn.microsoft.com/en-us/magazine/cc164015.aspx

EDIT: ライン

t2.Elapsed += (e, o) => t1.Stop(); 

続い

t2.Elapsed += new ElapsedEventHandler(t2_Elapsed); 

のように書くことができ

void t2_Elapsed(object sender, ElapsedEventArgs e) 
{ 
    t1.Stop(); 
} 

Visual StudioでCtrl + Spaceキーを押したときに実際に得られるものです。下のメソッドではt1にアクセスできます。 ...

成功した場合

+0

3行目の構文を噛むことができますか?私はそれがどのように機能するのか分かりません。 –

+0

私は上記の説明を挿入しました... - コメントのコードはちょっと面倒です... – ChriPf

1

あなたはそれが(たとえば、それが毎秒ティック場合)グローバル変数へのすべての反復を+1を入れて作るいけない理由、タイマーは、変数ごとに目盛りをチェックして、VAR一度作ります600に達すると、タイマーに自分自身を無効にするよう指示します。

1

クラス変数を宣言し、タイマーをDateTime.Nowに開始するときに設定します。次に、あなたのタイマーでこれを含める:

DateTime time = DateTime.Now; 

    private void timer1_Tick(object sender, EventArgs e) 
    { 
     if (DateTime.Compare(DateTime.Now, time.AddMinutes(10)) > 0) 
     { 
      timer1.Stop(); 
     } 

     // timer code 
    } 
1

経過イベントハンドラとグローバルブール

 Private Boolean eOccured = False; 

    System.Timers.Timer aTimer = new System.Timers.Timer(); 
    aTimer.Elapsed+=new ElapsedEventHandler(OnTimedEvent); 
    aTimer.Interval = 600000; //milliseconds(10 min) 
    aTimer.Enabled = True; 

を割り当て... コードは、イベントトリガーにタイマーを停止ブール値を活性化させます。

private static void OnTimedEvent(object source, ElapsedEventArgs e) 
    { 
     If (eOccured) 
     { 
      aTimer.Stop(); 
     } 
    } 
関連する問題