C# System.Threading.Thread计时器在特定日期运行

C# System.Threading.Thread计时器在特定日期运行,c#,multithreading,timer,C#,Multithreading,Timer,我正在做一个C#项目,我正试图在每个月的1号触发一个事件 到目前为止,我有以下代码 TimeSpan timeSpan = new TimeSpan(19, 17, 00); DateTime current = DateTime.Now; TimeSpan timeToGo = timeSpan- current.TimeOfDay; ScheduledTaskExec scheduledTaskExec = new ScheduledTaskExec(); Timer timer = n

我正在做一个C#项目,我正试图在每个月的1号触发一个事件

到目前为止,我有以下代码

TimeSpan timeSpan = new TimeSpan(19, 17, 00);

DateTime current = DateTime.Now;
TimeSpan timeToGo = timeSpan- current.TimeOfDay;
ScheduledTaskExec scheduledTaskExec = new ScheduledTaskExec();

Timer timer = new Timer(x =>
{
    scheduledTaskExec.executeTask();
}, null, timeToGo, TimeSpan.Zero);
我不知道如何扩展它,使其工作,以便在每个月1日的某个特定时间启动计时器


谢谢你能提供的帮助

计时器不是为长时间设计的,您需要使用外部工具(特定于操作系统,通常集成到操作系统中),以便在预定日期启动流程


大多数操作系统都有API,您可以在代码中钩住它,让您可以通过编程创建这些任务。这将允许您通过代码创建和管理windows计划任务。您需要自己研究如何通过代码在Linux上创建类似的计划任务。

将DateTime。减去工时,以获得未来日期与上次运行日期之间的时间跨度


试着看一看。它是Quartz for Java的.Net端口。我过去用它来安排日程。您可以在Windows服务中使用它来创建一个事件,该事件将在每个月的第一天触发。

为什么需要通过C#来安排它?有许多调度实用程序,包括Windows Scheduler,它可以处理“在XYZ时间每月1日运行此.exe”。它需要与Linux下的Windows和Mono兼容,应该在帖子中提到这一点。我不想有一个单独的可执行文件来完成Schedule的工作,比如当一个可执行文件需要点击并创建特定于操作系统的解决方案时进行调度。向操作系统的调度程序添加内容需要5分钟的时间。要继续Adam所说的,即使您通过代码执行,您也需要操作系统特定的解决方案,以确保您的程序始终在后台运行,以处理启动任务(Windows上的服务,我不知道Linux上的服务),可执行文件将全天候永久运行。我只需要在某个时间执行一个函数