在使用计时器执行功能之前等待 x 小时不起作用
waiting for x hours before executing a function using timer does not work
我想等待 x 小时才能在 C# 中执行某些代码。我认为使用计时器是个好主意。 (使用 thread.sleep 似乎不对)。但它就是行不通。我正在使用以下代码:
static void Main(string[] args)
{
System.Timers.Timer timer = new System.Timers.Timer();
timer.Interval = x * 3600000;
timer.Enabled = true;
timer.Elapsed += (o, e) => SomeFunction(username);
timer.AutoReset = true;
timer.Start();
}
这段代码应该等待 x 小时然后执行 SomeFunction 但是当我调试它时,主函数在 timer.start() 之后结束。
你看到这里有什么问题吗?或者你能建议除 thread.sleep 或 await Task.Delay() 之外的替代方案吗?
一旦您的 Main
函数退出,您的进程以及包括计时器在内的所有后台线程都会结束。
您需要使用 Thread.Sleep()
、Console.ReadKey()
或任何合适的方法来保持您的主线程处于活动状态。
或者,如果您不想让您的进程保持活动状态,您可以 register a scheduled task with Windows 成为 运行 一个小时后,然后结束。
这里有两个问题。第一个是可执行文件将在所有前台线程完成时退出 运行。唯一的前台线程是通过 Main()
所以它将退出。
第二个是您没有在任何地方存储 timer
。即使另一个线程让可执行文件继续运行,timer
也可能在 timer.Start()
returns 之后并且肯定在 Main()
退出后有资格进行垃圾收集。
using thread.sleep does not seem right
这通常不是一个好主意,但考虑到你只有一个线程,并且考虑到你必须在一个应用程序中至少有一个前台线程,Thread.Sleep
似乎是完全合理的特殊案例。 Task.Delay
一样多。
更一般地说,我想我更希望它是计划任务或服务。特别是,在我想等待数小时才能完成某些事情的情况下,我经常希望它能够在重启后继续存在。
查看 Quartz.Net 和 this 计划任务。
我想等待 x 小时才能在 C# 中执行某些代码。我认为使用计时器是个好主意。 (使用 thread.sleep 似乎不对)。但它就是行不通。我正在使用以下代码:
static void Main(string[] args)
{
System.Timers.Timer timer = new System.Timers.Timer();
timer.Interval = x * 3600000;
timer.Enabled = true;
timer.Elapsed += (o, e) => SomeFunction(username);
timer.AutoReset = true;
timer.Start();
}
这段代码应该等待 x 小时然后执行 SomeFunction 但是当我调试它时,主函数在 timer.start() 之后结束。
你看到这里有什么问题吗?或者你能建议除 thread.sleep 或 await Task.Delay() 之外的替代方案吗?
一旦您的 Main
函数退出,您的进程以及包括计时器在内的所有后台线程都会结束。
您需要使用 Thread.Sleep()
、Console.ReadKey()
或任何合适的方法来保持您的主线程处于活动状态。
或者,如果您不想让您的进程保持活动状态,您可以 register a scheduled task with Windows 成为 运行 一个小时后,然后结束。
这里有两个问题。第一个是可执行文件将在所有前台线程完成时退出 运行。唯一的前台线程是通过 Main()
所以它将退出。
第二个是您没有在任何地方存储 timer
。即使另一个线程让可执行文件继续运行,timer
也可能在 timer.Start()
returns 之后并且肯定在 Main()
退出后有资格进行垃圾收集。
using thread.sleep does not seem right
这通常不是一个好主意,但考虑到你只有一个线程,并且考虑到你必须在一个应用程序中至少有一个前台线程,Thread.Sleep
似乎是完全合理的特殊案例。 Task.Delay
一样多。
更一般地说,我想我更希望它是计划任务或服务。特别是,在我想等待数小时才能完成某些事情的情况下,我经常希望它能够在重启后继续存在。
查看 Quartz.Net 和 this 计划任务。