2010-12-07 44 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 2010-12-07 17:34:17

+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 2010-12-07 17:34:26

回答

4

看那System.Timer類。你基本上設置了一個時間間隔(例如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更新端口狀態定期(見上面更新的例子)。

您需要牢記的一點很重要,即Timer將在單獨的線程上運行,並且如果它從最後一次完成運行之前又重新引發事件(如果超過間隔時間跑步。

0

你的問題,因爲有些模糊實現你想要做什麼的許多不同的方法。然而,在最簡單的術語,你需要創建蜱您定義的任何頻率,例如System.Threading.Timer:

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"); 
} 

在這個例子中,計時器會「滴答」每5秒和執行任何功能,您代碼到TimerTick方法中。如果用戶想要改變頻率,那麼你會破壞當前的定時器並用新頻率初始化。

這一切說,我必須強調,這是最簡單的實現,並可能不適合你的需求。