创建一个异步运行的后台计时器
本文关键字:运行 后台 计时器 异步 一个 创建 | 更新日期: 2023-09-27 18:08:16
我真的很纠结。我正在visual studio中创建一个winforms
应用程序,需要一个每半小时滴答一次的背景计时器-这是为了从服务器上拉下更新。
我尝试了几种不同的方法,但他们都失败了,要么是由于糟糕的教程/例子,要么是我自己在C#
中的缺点。我认为向你展示我迄今为止所做的努力是浪费时间,因为我所做的似乎与目标相去甚远。
有没有人知道一个清晰和简单的方法来实现一个异步的背景定时器,是很容易理解的C#
新手?
// Create a 30 min timer
timer = new System.Timers.Timer(1800000);
// Hook up the Elapsed event for the timer.
timer.Elapsed += OnTimedEvent;
timer.Enabled = true;
...
private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
// do stuff
}
与通常的警告:timer不会非常准确,可能需要GC.KeepAlive(timer)
参见:为什么System.Timers.Timer可以保存GC,而System.Threading.Timer不能?
在表单中声明成员变量:
System.Timers.Timer theTimer;
在加载表单时(或者其他需要启动更新轮询的时候),执行:
theTimer = new System.Timers.Timer(1800000);
theTimer.Elapsed += PollUpdates;
theTimer.Start();
像这样声明PollUpdates成员函数:
private void PollUpdates(object sender, EventArgs e)
{
}
我认为你需要了解所有定时器类。请看下面Jon的回答。
你用的是哪种定时器?
- System.Windows.Forms。计时器将在UI线程
中执行。- System.Timers。定时器在线程池线程中执行,除非您指定一个SynchronizingObject
- System.Threading。Timer在线程池线程
中执行回调。在所有情况下,计时器本身都是异步的——它在触发之前不会"占用"线程。
来源:做。net定时器异步运行?