我真的很挣扎。我正在visual studio中创建一个winforms
应用程序,需要一个每半小时打一次的后台计时器 - 这样做的目的是从服务器下载更新。
我尝试了几种不同的方法,但是由于教程/示例不好或者C#
中我自己的缺点,它们都失败了。我认为到目前为止,向我展示我所尝试的内容将是浪费时间,因为我认为我的尝试远远不够。
有没有人知道实现异步后台计时器的一种简单明了的方法,C#
新手很容易理解?
答案 0 :(得分:32)
// 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
}
通常需要注意:计时器不会非常准确,可能需要GC.KeepAlive(timer)
另请参阅:Why does a System.Timers.Timer survive GC but not System.Threading.Timer?
答案 1 :(得分:10)
在表单中声明成员变量:
System.Timers.Timer theTimer;
在表单加载(或者您需要开始更新轮询的任何其他时间)上,执行:
theTimer = new System.Timers.Timer(1800000);
theTimer.Elapsed += PollUpdates;
theTimer.Start();
声明你的PollUpdates成员函数如下:
private void PollUpdates(object sender, EventArgs e)
{
}
答案 2 :(得分:6)
我认为您需要了解所有计时器类。请参阅Jon的答案。
你使用什么样的计时器?
- System.Windows.Forms.Timer将在UI线程中执行
- System.Timers.Timer在线程池线程中执行,除非您 指定SynchronizingObject
- System.Threading.Timer在线程池线程中执行其回调
醇>在所有情况下,计时器本身都是异步的 - 在它发生之前它不会“占用”一个线程。