C# 在.Net 3.5中的特定时间关闭控制台应用程序

C# 在.Net 3.5中的特定时间关闭控制台应用程序,c#,C#,如何创建一个函数,在06:00 am自动关闭程序,无论它是否完成其工作 static void Main(string[] args) { //How to create a function to check the time and kill the programe foreach(var job in toDayjobs) { runJob(); } } 假设您想在下午6:00关闭应用程序,则可以使用此代码 pr

如何创建一个函数,在06:00 am自动关闭程序,无论它是否完成其工作

 static void Main(string[] args)
 {
    //How to create a function to check the time and kill the programe
    foreach(var job in toDayjobs)
    {          
        runJob();
    }
 }

假设您想在下午6:00关闭应用程序,则可以使用此代码

private static bool isCompleted = false;
static void Main(string[] args)
        {
        var hour = 16;
        var date = DateTime.Now;

        if (DateTime.Now.Hour > hour)
            date = DateTime.Now.AddDays(1);

        var day = date.Day;

        var timeToShutdown = new DateTime(date.Year, date.Month, day, 18, 0, 0).Subtract(DateTime.Now);

        var timer = new System.Timers.Timer();
        timer.Elapsed += Timer_Elapsed;
        timer.Interval = timeToShutdown.TotalMilliseconds;
        timer.Start();

 //Do the forloop here
 isCompleted= true;

            Console.WriteLine("Press any key to continue");
            Console.Read();
        }

        private static void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            var timer = (sender as System.Timers.Timer);
            timer.Stop();
            timer.Dispose();

            if(isCompleted == false)
              throw new Exception("Work was not completed");
            Environment.Exit(0);
        }

这个代码段应该可以工作。 不要忘记使用System.Threading添加

static void Main(string[] args)
    {
        CloseAt(new TimeSpan(6, 0, 0)); //6 AM

        //Your foreach code here

        Console.WriteLine("Waiting");
        Console.ReadLine();
    }

    public static void CloseAt(TimeSpan activationTime)
    {
        Thread stopThread = new Thread(delegate ()
        {
            TimeSpan day = new TimeSpan(24, 00, 00);    // 24 hours in a day.
            TimeSpan now = TimeSpan.Parse(DateTime.Now.ToString("HH:mm"));     // The current time in 24 hour format
            TimeSpan timeLeftUntilFirstRun = ((day - now) + activationTime);
            if (timeLeftUntilFirstRun.TotalHours > 24)
                timeLeftUntilFirstRun -= new TimeSpan(24, 0, 0);
            Thread.Sleep((int)timeLeftUntilFirstRun.TotalMilliseconds);
            Environment.Exit(0);
        })
        { IsBackground = true };
        stopThread.Start();
    }

你需要一个调度程序。自己用定时器写一张支票,或者使用第三方调度程序,如Quartz.net。windows调度程序呢?@CodeJoy我无法理解它在说什么。他的意思是使用windows调度程序中的taskkill命令关闭你的应用程序。我可以建议对结束时间进行不同的计算,在上午6:00结束吗<代码>var endTime=DateTime.Now.Hour<6?DateTime.Today.AddHours(6):DateTime.Today.AddDays(1.AddHours(6)处理当前时间在6:00之前而当前时间在6:00之后的两种情况-在第二天结束。@grek40如果现在是凌晨2:00,那么代码将导致上午8:00而不是早上6:00,如果时间是上午8:00,然后是第二天下午2:00,这两种情况都是错误的cases@HaithamShaddad那么,如何修改代码以适应这两种情况呢?@HaithamShaddad请注意
DateTime.Now
DateTime.Today
@grek40谢谢,我没有注意到,您的解决方案很整洁,我应该把foreach代码放在哪里?控制台上方。WriteLine(“等待”);?首先调用CloseAt()方法,然后执行foreach代码为什么它没有停止..当我测试它时。我设置CloseAt(新的时间跨度(18,57,0));