Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何向应用程序添加计时器!_C# - Fatal编程技术网

C# 如何向应用程序添加计时器!

C# 如何向应用程序添加计时器!,c#,C#,我想每隔一段时间更新一个应用程序。我正在寻找一些类型的if语句或try-catch语句。我在同一节课上已经有一个foreach语句了,但是我想我不能把它放进去?我还想设置它,以便用户可以更改刷新率。感谢您的帮助。谢谢 这是我想把计时器放进去的方法 private void _UpdatePortStatus(string[] files) { foreach (string file in files) { PortStatus ps = n

我想每隔一段时间更新一个应用程序。我正在寻找一些类型的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);
                }
            }
        }
    }

使用
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谢谢你的提示,我没有把它默认为真实的,除非我遗漏了什么?你是对的。很抱歉。不知道我在想什么