我有一个应用程序,我想在一段时间内更新。我正在寻找某种类型的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 :(得分: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);
}
更新:为了回应您发布的代码,您似乎只想调用_UpdatePortStatus
定期更新端口状态(请参阅上面的更新示例)。
您需要记住的一个重点是,Timer将在一个单独的线程上运行,因此如果事件超过间隔时间,它可能会在上次运行完成之前再次引发事件。运行
答案 1 :(得分:1)
使用System.Timers.Timer
,System.Threading.Timer
或System.Windows.Forms.Timer
...取决于您“想要间隔更新的具体内容。”
请参阅以下文章:
答案 2 :(得分: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方法中编码的任何功能。如果用户想要更改频率,那么您将销毁当前计时器并使用新频率进行初始化。
所有这些都说,我必须强调这是最简单的实施,可能不适合你的需要。