C# 在.Net 3.5中的特定时间关闭控制台应用程序
如何创建一个函数,在06:00 am自动关闭程序,无论它是否完成其工作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
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));