我正在尝试在用户定义的时间运行一段代码,但是datetime变量存储了我点击运行时的时间值,并且没有更新以检查时间是否已更改。
static void Main(string[] args)
{
Console.WriteLine("please enter the date in m/d/y h/m/s am/pm format ");
DateTime bombDate = Convert.ToDateTime(Console.ReadLine());
repeat:
//DateTime bombDate = "7/27/2016 4:13:16 AM";
DateTime now = DateTime.Now;
if (bombDate == now)
{
string _str = " this is a virus, you have been hit by a logic bomb ...";
while (true)
{
foreach (char c in _str)
{
SendKeys.SendWait(c.ToString());
Thread.Sleep(200);
}
Thread.Sleep(3000);
}
}
else {
goto repeat;
}
答案 0 :(得分:0)
您无法准确匹配这两个日期,您要比较此处的标记以及两个日期恰好同时执行的机会Now
匹配日期不是那么高。由于您只是从输入中指定秒数,因此请使用:
if ((bombDate - now).TotalSeconds < 0)
这匹配两个日期,即使它已经过了不到1秒。
或者你可以检查是否已经过了所需的时间:
if ((bombDate <= now))
答案 1 :(得分:0)
我会将此作为评论发布,但我不能。
根据您尝试做的事情,可能值得考虑编写程序并使用像Windows任务调度程序这样的标准工具来实际在特定条件/时间运行它。
另外goto很多人都皱起了眉头,这是有充分理由的。基本上你是在创造一个循环。为什么不这样宣布呢?一种可能性是使用一个只计算时间的循环(这基本上就是你在外循环中所做的)。
DateTime now = NULL;
while(bombDate != now){
now = DateTime.Now;
}
// Other Code beginning with string _str =
在规避时间问题的方法是在初始分配之后/循环之前添加另一个睡眠。这样你就可以确定在DateTime.Now的连续调用之间经过了一段时间。寻求像user3185569建议的更好的分辨率可能会更好。