当c#中的语句为False时,如何使循环执行?

当c#中的语句为False时,如何使循环执行?,c#,.net,winforms,scheduled-tasks,datetimepicker,C#,.net,Winforms,Scheduled Tasks,Datetimepicker,我为execute ssis包制作WinForms应用程序,我想用datepicker制作计时器,所以当我在下午5点选择datepicker时,该方法将在下午5点执行。我很难做到这一点,首先我尝试了do while,但当语句为false时它将停止执行,当语句为true时它将始终执行,我想创建的是,否则,我想循环就像检查不执行一样,所以它总是循环进行检查,并且只有在语句为true时才会执行 do { Executed(); } //Label3 is DateTimeNow while (

我为execute ssis包制作WinForms应用程序,我想用datepicker制作计时器,所以当我在下午5点选择datepicker时,该方法将在下午5点执行。我很难做到这一点,首先我尝试了do while,但当语句为false时它将停止执行,当语句为true时它将始终执行,我想创建的是,否则,我想循环就像检查不执行一样,所以它总是循环进行检查,并且只有在语句为true时才会执行

do
{
    Executed();
}
//Label3 is DateTimeNow
while (dateTimePicker1.Text == label3.Text);

所以逻辑是这样的,但是相反的,代码将循环直到语句为真,当语句从真开始时,代码将停止循环,当语句为假时,代码将停止循环,我试图实现的是,语句从假开始,并将继续检查,直到语句为真。我们能做到吗?谢谢

您可以使用not运算符“!”


与其使用循环检查
日期时间选择器的值是否需要,不如使用
计时器
并处理其
勾选
事件来检查
日期时间。现在
是需要的时间:

bool handled = false;
private void timer1_Tick(object sender, EventArgs e)
{
    var d1 = DateTime.Now;
    var d2 = dateTimePicker1.Value;

    if (d1.Year == d2.Year && d1.Month == d2.Month && d1.Day == d2.Day &&
        d1.Hour == d2.Hour && d1.Minute == d2.Minute)
    {
        if (!handled) //Allow running once
        {
            handled = true;
            DoSomething();
        }
    }
}
注意1:要使上述示例正常工作,请确保将计时器的
Interval
属性设置为
30000
以每
30
秒运行一次,并且在需要调度程序启动监控时启动计时器。然后,
DoSomething
方法将在您使用
DateTimePicker
设置的精确时间(最高达分钟级别)运行。您可以根据需求更改条件,例如,为了使其每天在指定的时间运行,您可以删除
d1.day==d2.day


注意2::创建类似调度库的目的是让您可以轻松地在应用程序中创建调度任务

也许你的意思是
=是的,谢谢,我对C#string还不熟悉,还不习惯语法。不,这不是我要问的,我要问的是如何使循环总是检查不执行,并在语句为真时执行,然后停止循环我的想法。因为您希望在语句为true时执行代码,所以循环必须相反,才能持续检查它。否则,就像你指出的那样,Theodorus会立即执行代码,而不是等待。嗯,这很难解释,也许我不能用do while来做这件事,而不是用循环来检查,你应该依赖
dateTimePicker1
的事件,在文本是你要找的时候执行任务。嗯,也许你是对的,那么当datTimePicker==label3执行时,我应该使用什么呢?我也不能使用if-else,因为我的语句将从false条件开始。控件类型是什么?它是一个日期时间选择器吗?是的,它是一个日期时间选择器,就像这个“M/d/yyyy hh:mm:ss tt”;检查时间是否已经过去不是比检查精确匹配更好吗?我想如果间隔时间为32秒,你几乎可以保证比赛成功,但我认为通常情况下会“更好”(例如,如果间隔时间增加)。不过我想这要看情况而定,因为OP只说他希望它在给定的时间运行,但没有说明是否因为任何原因错过了该时间。@pinkfloydx33这只是一个例子。OP更了解需求。我个人认为,用户的意思是在特定的时间运行任务。但实现也可以简单地更改以满足您的需求:)
bool handled = false;
private void timer1_Tick(object sender, EventArgs e)
{
    var d1 = DateTime.Now;
    var d2 = dateTimePicker1.Value;

    if (d1.Year == d2.Year && d1.Month == d2.Month && d1.Day == d2.Day &&
        d1.Hour == d2.Hour && d1.Minute == d2.Minute)
    {
        if (!handled) //Allow running once
        {
            handled = true;
            DoSomething();
        }
    }
}