我真的这个挣扎。 我创建一个winforms
在Visual Studio应用程序,需要蜱每半小时一次后台计时器-这样做的目的是为了从服务器下拉更新。
我已经尝试了不同的方法,但他们都失败了,无论是由于不良的教程/例子,或在自己的不足C#
我认为这将是时间来告诉你浪费了我迄今为止尝试过,因为它似乎是我的尝试是相当离谱。
有谁知道实现异步后台计时器,通过易于理解的清晰和简单的方法C#
新手?
我真的这个挣扎。 我创建一个winforms
在Visual Studio应用程序,需要蜱每半小时一次后台计时器-这样做的目的是为了从服务器下拉更新。
我已经尝试了不同的方法,但他们都失败了,无论是由于不良的教程/例子,或在自己的不足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
}
与通常的注意事项:计时器不会是巨大的准确,可能需要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)
{
}
我认为你需要了解所有的定时器类。 请参阅下面乔恩的答案。
您正在使用什么样的计时器?
- System.Windows.Forms.Timer将在UI线程中执行
- System.Timers.Timer执行一个线程池线程,除非你指定一个SynchronizingObject的
- System.Threading.Timer执行其回调的线程池线程
在所有情况下,定时器本身将是异步 - 它不会“占用”一个线程,直到它触发。
来源: 待办事项.NET定时器异步方式运行?