2010-12-07 22 views
-1

私は一定の間隔で更新したいアプリケーションを持っています。私は多分何らかのタイプのif文またはtry-catch文を探しています。私はすでに同じクラスのforeachステートメントを持っていますが、私はそこに置くことができないと思いますか?私はまた、ユーザーがリフレッシュレートを変更できるように設定したいと思います。どんな助けもありがとうございます。おかげアプリにタイマーを追加する方法!

ここでは、それはあなたが「更新したいということです正確に何に依存する...私は...

private void _UpdatePortStatus(string[] files) 
{ 

foreach (string file in files) 

      { 
      PortStatus ps = new PortStatus(); 
      ps.ReadXml(new StreamReader(file)); 



      if (!_dicPortStatus.ContainsKey(ps.General[0].Group)) 
      { 
       _dicPortStatus.Add(ps.General[0].Group, ps); 
      } 

      PortStatus psOrig = _dicPortStatus[ps.General[0].Group]; 

      foreach (PortStatus.PortstatusRow psr in ps.Portstatus.Rows) 
      { 
       DataRow[] drs = psOrig.Portstatus.Select("PortNumber = '" + psr.PortNumber + "'"); 

       if (drs.Length == 1) 
       { 
        DateTime curDt = DateTime.Parse(drs[0]["LastUpdateDateTimeUTC"].ToString()); 
        DateTime newDt = psr.LastUpdateDateTimeUTC; 

        if (newDt > curDt) 
        { 
         drs[0]["LastUpdateDateTimeUTC"] = newDt; 
        } 
       } 
       else if (drs.Length == 0) 
       { 
        psOrig.Portstatus.ImportRow(psr); 
       } 
       else 
       { 
        throw new Exception("More than one of the same portnumber on PortStatus file: " + file); 
       } 
      } 
     } 
    } 
+0

WebまたはWinforms ???タイマーコントロールを使用できませんか? – Shoban

+0

関連する[MSDNのドキュメント](http://msdn.microsoft.com/en-us/library/system.timers.timer%28v=VS.100%29.aspx)のいくつかを調べましたか? C#には[その他の種類](http://social.msdn.microsoft.com/Search/en-us?query=timer)のタ​​イマーもあります。 – eldarerathis

+0

ここでは、私はタイマーを使用する必要がある方法です...多分これは役立ちます... –

答えて

4

は、以下の記事を参照してください。基本的にインターバル(10000ミリ秒など)を設定し、インターバル時間が経過するたびにイベントを発生させます。

リフレッシュレートを変更できるようにするには、ユーザーからの入力を受け取り、それを使用してTimerIntervalを更新する方法を作成します。 TimerIntervalはミリ秒単位であるため、ユーザーが入力した値に変換する必要があります。

ので、たとえばから、イベントが10秒ごとに発生します:

System.Timers.Timer aTimer = new System.Timers.Timer(10000); //10 seconds 

// Hook up the Elapsed event for the timer. 
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent); 
aTimer.Enabled = true; // Starts the Timer 

// Specify what you want to happen when the Elapsed event is raised 
private static void OnTimedEvent(object source, ElapsedEventArgs e) 
{ 
    //Perform update 
    _UpdatePortStatus(files); 
} 

UPDATE:あなたの投稿コードに対応してを、あなたが単にポートのステータスを更新するために_UpdatePortStatusを呼び出したい表示されます定期的に(上記の更新された例を参照)。

重要なポイントは、タイマーは別のスレッドで実行されるため、インターバル時間を超えると最後の実行からイベントが再開される可能性があることです走る。

+0

これはダム質問かもしれませんが、私は(ファイル)の部分に挿入する必要があるかを把握しようとしています:_UpdatePortStatus(ファイル) –

+0

+1は、再エンランシーに関する重要なポイントです。また、あなたはaTimer.autoreset = trueを追加したいと思うかもしれません。 –

+0

@Joeこれはあなた自身のメソッドへの呼び出しです。あなたが渡すものはここで渡すべきですが、毎回それらを取得する必要があると思いますタイマーは – w69rdy

0

あなたの質問には、やりたいことを達成するためのさまざまな方法があるため、やや曖昧です。しかし、簡単に言うと、あなたは、たとえば、ユーザーが定義したどんな周波数に目盛りSystem.Threading.Timer作成する必要があります。タイマーが意志「チック」5秒ごとにこの例では

private System.Threading.Timer myTimer; 

private void StartTimer() 
{ 
     myTimer = new System.Threading.Timer(TimerTick, null, 0, 5000); 
} 

private void TimerTick(object state) 
{ 
    Console.WriteLine("Tick"); 
} 

をし、実行するどんな機能があなたをコードをTimerTickメソッドに追加します。ユーザーが周波数を変更したい場合は、現在のタイマーを破棄して新しい周波数で初期化します。

これはすべて、これは実装が最も簡単であり、ニーズに合わない可能性があることを強調する必要があります。

関連する問題