创建背景定时器异步运行(Creating a background timer to run asy

2019-08-20 07:28发布

我真的这个挣扎。 我创建一个winforms在Visual Studio应用程序,需要蜱每半小时一次后台计时器-这样做的目的是为了从服务器下拉更新。

我已经尝试了不同的方法,但他们都失败了,无论是由于不良的教程/例子,或在自己的不足C# 我认为这将是时间来告诉你浪费了我迄今为止尝试过,因为它似乎是我的尝试是相当离谱。

有谁知道实现异步后台计时器,通过易于理解的清晰和简单的方法C#新手?

Answer 1:

    // 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?



Answer 2:

声明成员变量在您的形式:

System.Timers.Timer theTimer;

在窗体加载(或任何其它时间,你需要开始更新轮询),这样做:

theTimer = new System.Timers.Timer(1800000);
theTimer.Elapsed += PollUpdates;
theTimer.Start();

声明你这样的PollUpdates成员函数:

private void PollUpdates(object sender, EventArgs e)
{
}


Answer 3:

我认为你需要了解所有的定时器类。 请参阅下面乔恩的答案。

您正在使用什么样的计时器?

  1. System.Windows.Forms.Timer将在UI线程中执行
  2. System.Timers.Timer执行一个线程池线程,除非你指定一个SynchronizingObject的
  3. System.Threading.Timer执行其回调的线程池线程

在所有情况下,定时器本身将是异步 - 它不会“占用”一个线程,直到它触发。

来源: 待办事项.NET定时器异步方式运行?



文章来源: Creating a background timer to run asynchronously