Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# I';I’我对在某个时间只检查一次的逻辑很好奇_C# - Fatal编程技术网

C# I';I’我对在某个时间只检查一次的逻辑很好奇

C# I';I’我对在某个时间只检查一次的逻辑很好奇,c#,C#,我想要帮助 代码有一些问题。 我想每天在某个时间只做一次检查 特别是,问题在DateTime.Now.Hour==11部分中最为严重。 我在某些时候检查有困难。我需要在whlie语句中编写只能在11:00检查一次的代码 我创建了一个许可证文件并检查了文件的日期 public static CResult Dailytime(string date) { CResult result = new CResult(); if(resu

我想要帮助

代码有一些问题。 我想每天在某个时间只做一次检查

特别是,问题在DateTime.Now.Hour==11部分中最为严重。 我在某些时候检查有困难。我需要在whlie语句中编写只能在11:00检查一次的代码

我创建了一个许可证文件并检查了文件的日期

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);
}