C# I';I’我对在某个时间只检查一次的逻辑很好奇
我想要帮助 代码有一些问题。 我想每天在某个时间只做一次检查 特别是,问题在DateTime.Now.Hour==11部分中最为严重。 我在某些时候检查有困难。我需要在whlie语句中编写只能在11:00检查一次的代码 我创建了一个许可证文件并检查了文件的日期C# I';I’我对在某个时间只检查一次的逻辑很好奇,c#,C#,我想要帮助 代码有一些问题。 我想每天在某个时间只做一次检查 特别是,问题在DateTime.Now.Hour==11部分中最为严重。 我在某些时候检查有困难。我需要在whlie语句中编写只能在11:00检查一次的代码 我创建了一个许可证文件并检查了文件的日期 public static CResult Dailytime(string date) { CResult result = new CResult(); if(resu
public static CResult Dailytime(string date)
{
CResult result = new CResult();
if(result.nRet == 0)
{
while (true)
{
if (result.nRet == 1 || result.nRet == 2)
{
return result;
}
if (DateTime.Now.Hour == 11)
{
result = DailyCheckData(date);
if(result.nRet == 1 || result.nRet == 2)
{
return result;
}
}
System.Threading.Thread.Sleep(60 * 30 * 1000);
}
}
return result;
}
public static CResult DailyCheckData(string data)
{
CResult result = new CResult();
DateTime licenseDate = Convert.ToDateTime(data);
string dateNow = DateTime.Now.ToString("yyyy-MM-dd");
int compareDate = DateTime.Compare(Convert.ToDateTime(data), DateTime.Now);
if (licenseDate.ToString("yyyy-MM-dd") == dateNow)
{
result = ExpirationCertificate();
Console.WriteLine("Result = " + result.Result + " Msg = " + result.Msg + " nRet = " + result.nRet);
return result;
}
else
{
if (compareDate > 0)
{
result = TrueCertificate();
Console.WriteLine("Result = " + result.Result + " Msg = " + result.Msg + " nRet = " + result.nRet);
}
else if (compareDate <= 0)
{
result = ExpirationCertificate();
Console.WriteLine("Result = " + result.Result + " Msg = " + result.Msg + " nRet = " + result.nRet);
}
return result;
}
}
CResult class
nRet= 0 or 1 or 2
0 = fasle date
1 = false file
2 = true
publicstaticcresultdailytime(字符串日期)
{
CResult结果=新的CResult();
如果(result.nRet==0)
{
while(true)
{
如果(result.nRet==1 | | result.nRet==2)
{
返回结果;
}
如果(DateTime.Now.Hour==11)
{
结果=每日检查数据(日期);
如果(result.nRet==1 | | result.nRet==2)
{
返回结果;
}
}
系统线程线程睡眠(60*30*1000);
}
}
返回结果;
}
公共静态CResult DailyCheckData(字符串数据)
{
CResult结果=新的CResult();
DateTime licenseDate=Convert.ToDateTime(数据);
字符串dateNow=DateTime.Now.ToString(“yyyy-MM-dd”);
int compareDate=DateTime.Compare(转换.ToDateTime(数据),DateTime.Now);
if(licenseDate.ToString(“yyyy-MM-dd”)==dateNow)
{
结果=过期证书();
Console.WriteLine(“Result=“+Result.Result+”Msg=“+Result.Msg+”nRet=“+Result.nRet”);
返回结果;
}
其他的
{
如果(比较>0)
{
结果=TrueCertificate();
Console.WriteLine(“Result=“+Result.Result+”Msg=“+Result.Msg+”nRet=“+Result.nRet”);
}
否则,如果(compareDate可以尝试为DateTime创建一个变量。现在,在一行代码之后,该值将更改
DateTime licenseDate = Convert.ToDateTime(data);
string dateNow = DateTime.Now.ToString("yyyy-MM-dd");
int compareDate = DateTime.Compare(Convert.ToDateTime(data), DateTime.Now);
到
您不应该在如此长的时间内使用Thread.Sleep()方法。让线程睡眠如此长的时间是糟糕的编程逻辑
要解决这个问题,您可以做的是,创建一个。链接中附带了一个示例。一个与您的逻辑相匹配的简单片段是:
licenseStart = //setYours
lastCheck = DateTime.Now;
nextCheck = now.AddDays(1); // now.AddHours(1)
var timer = new Timer(o=>{/* Do work*/}, null, TimeSpan.Zero, nextCheck);
希望能有帮助!我问了关于只能在11点循环一次的逻辑。
但是我找不到正确的答案,我找到了答案
我英语说得不好。
这就是为什么其他人不理解这个问题的意图
bool bOnce = true;
//bool s0nce = true;
while (true)
{
if (DateTime.Now.Hour == 11 && bOnce)
{
//run code
}
if (bOnce == true)
bOnce = false;
else
bOnce = true;
Thread.Sleep(10 * 60 * 1000);
}
没有问题。DateTime.Now.Hour==11是问题。System.Threading.Thread.Sleep(60*30*1000);我想创建一个类似于调度器的角色,在11点钟工作。这个链接是否可以帮助您了解简单的调度器,作为一个旁白,查看Windows scheduler您可以确切地澄清问题是什么吗?发生了什么事?期望的行为是什么?我想在Dailytime类在18:00做一次DailyCheckData类工作。您需要解释吗这正是你所说的“我在检查某些时间时遇到困难。”“DateTime.Now.Hour==11”在睡眠30分钟的情况下,WHILE循环的一部分可以接收一次,它可能会出现两次。它可以在40分钟的设置中通过。我不明白。好的,现在我理解了你的问题,因为你从无限WHILE循环返回一次结果,为了避免这种情况,请将结果对象设为静态(全局),或将结果对象传递给DailyTime函数,在该函数中,您可以借助计时器方法定期更新它
bool bOnce = true;
//bool s0nce = true;
while (true)
{
if (DateTime.Now.Hour == 11 && bOnce)
{
//run code
}
if (bOnce == true)
bOnce = false;
else
bOnce = true;
Thread.Sleep(10 * 60 * 1000);
}