gpt4 book ai didi

c# - 关于定时器和可变间隔的问题

转载 作者:行者123 更新时间:2023-11-30 15:10:39 24 4
gpt4 key购买 nike

这个计时器的目的是在午夜时分执行一些代码。所以基本上,第一个时间间隔是现在和午夜之间,之后的所有时间间隔都是 24 小时。

现在一切都很好,但我想知道这个计时器业务是如何运作的。每次重置计时器时,MyTimer.Interval 是否都重新计算?

System.Timers.Timer MyTimer = new System.Timers.Timer();
MyTimer.Elapsed += new ElapsedEventHandler(TriggeredMethod);
MyTimer.Interval = [pseudocode]Time between now and midnight[/pseudocode];
MyTimer.Start();

编辑:

我在设置 TriggerMethod 内的间隔时遇到问题。我应该在哪里/如何启动计时器,这样我就不会收到任何上下文错误?

private void Form1_Load(object sender, EventArgs e)
{
System.Timers.Timer MyTimer = new System.Timers.Timer();
MyTimer.Elapsed += new ElapsedEventHandler(TriggeredMethod);
MyTimer.Start();
}

private void TriggerMethod(object source, ElapsedEventArgs e)
{
MyTimer.Interval = [pseudocode]Time between now and midnight[/pseudocode];
}

最佳答案

Interval 属性是定时器调用之间的毫秒数。

要在午夜运行计时器,您需要将每个 Elapsed 事件中的 Interval 更改为 (int)(DateTime.Today.AddDays(1) - DateTime.Now).TotalMilliseconds.

要在 Elapsed 处理程序中访问计时器,您需要将计时器存储在类的一个字段中,如下所示:

System.Timers.Timer MyTimer
private void Form1_Load(object sender, EventArgs e)
{
MyTimer = new System.Timers.Timer();
//...
}

请注意,顺便说一句,System.Timers.Timer 不会在 UI 线程上触发。
因此,您不能在 Elapsed 处理程序中操作表单。
如果您需要操作表单,您可以切换到 System.Windows.Forms.Timer(不太准确)或调用 BeginInvoke

关于c# - 关于定时器和可变间隔的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3054147/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com