C# 如何向应用程序添加计时器!
我想每隔一段时间更新一个应用程序。我正在寻找一些类型的if语句或try-catch语句。我在同一节课上已经有一个foreach语句了,但是我想我不能把它放进去?我还想设置它,以便用户可以更改刷新率。感谢您的帮助。谢谢 这是我想把计时器放进去的方法C# 如何向应用程序添加计时器!,c#,C#,我想每隔一段时间更新一个应用程序。我正在寻找一些类型的if语句或try-catch语句。我在同一节课上已经有一个foreach语句了,但是我想我不能把它放进去?我还想设置它,以便用户可以更改刷新率。感谢您的帮助。谢谢 这是我想把计时器放进去的方法 private void _UpdatePortStatus(string[] files) { foreach (string file in files) { PortStatus ps = n
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);
}
}
}
}
使用
System.Timers.Timer
、System.Threading.Timer
或System.Windows.Forms.Timer
。。。取决于您“希望在某个时间间隔内更新”的确切内容
见以下条款:
看看这门课。您基本上设置了一个间隔(例如10000毫秒),每次间隔时间过后,它都会引发一个事件
要允许用户更改刷新率,请编写一个接收用户输入的方法,并使用该方法更新更新。请注意,单位为毫秒,因此您可能需要从用户输入的任何内容转换为毫秒
因此,根据示例,事件将每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);
}
更新:为了响应您发布的代码,您似乎只想调用\u updateport status
定期更新端口状态(参见上面更新的示例)
但需要记住的一点是,计时器将在单独的线程上运行,因此,如果运行时间超过了间隔时间,则可能会在上次运行结束之前再次引发事件。您的问题有些模糊,因为有许多不同的方法可以实现您的目标。但是,用最简单的术语来说,您需要创建一个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方法中编写的任何功能。如果用户想要更改频率,那么您将破坏当前计时器并使用新频率初始化
尽管如此,我必须强调,这是最简单的实现,可能不适合您的需要。Web或Winforms???你不能用定时器控制吗?你看过一些相关的吗?C#中也有很多计时器。下面是我需要在中使用计时器的方法…也许这会有帮助…这可能是一个愚蠢的问题,但我正在试图找出我需要在:_UpdatePortStatus(files)+1的(files)部分插入什么,以了解关于重新注册的要点。此外,我认为您可能需要添加aTimer.autoreset=true@Joe这是对您自己的方法的调用,所以您通常传入的任何内容都应该在这里传入,但我假设您需要在每次计时器启动时检索它们ticks@Conrad谢谢你的提示,我没有把它默认为真实的,除非我遗漏了什么?你是对的。很抱歉。不知道我在想什么