【问题标题】:How to Make looping Execute When Statement Is False in c#?当 C# 中的语句为 False 时,如何使循环执行?
【发布时间】:2018-08-05 18:26:09
【问题描述】:

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

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

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

【问题讨论】:

  • 嗯也许你是对的,所以当 datTimePicker == label3 然后执行?
  • 但是我应该使用什么?我也不能使用 if else 因为我的陈述将从错误条件开始
  • dateTimePicker1的控件类型是什么?是DateTimePicker吗?
  • 是的,它的 DateTimePicker,就像这样 "M/d/yyyy hh:mm:ss tt";

标签: c# .net winforms scheduled-tasks datetimepicker


【解决方案1】:

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

while (dateTimePicker1.Text != label3.Text);

【讨论】:

  • 可能你的意思是!=
  • 是的,谢谢,我是 C# 字符串的新手,已经习惯了语法。
  • 不,这不是我要问的,我要问的是如何让循环始终检查不执行,并且在语句为真时执行然后停止循环
  • 我的想法完全是 SAN。因为您希望在语句为真时执行代码,所以循环必须相反才能不断检查它。否则就像你指出 Theodorus 一样,它会立即执行代码而不是等待。
  • 嗯,这很难解释,也许我不能用 do while 做到这一点
【解决方案2】:

您应该使用Timer 并处理其Tick 事件来检查DateTime.Now 是否是所需时间,而不是使用循环来检查DateTimePicker 的值:

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 秒运行一次,并且无论何时运行 Start 计时器您希望调度程序开始监视。然后DoSomething 方法将在您使用DateTimePicker 设置的准确时间(最多分钟级别)运行。您可以根据自己的需求更改条件,例如让它在每天的指定时间运行,您可以删除d1.Day == d2.Day。

注意 2::创建像 Quartz 这样的调度库是为了让您可以轻松地在应用程序中创建计划任务。

【讨论】:

  • 检查时间是否已过而不是检查是否完全匹配不是更好吗?我想以 30 秒的间隔,您几乎可以保证匹配,但我认为通常它可能会“更好”(例如,如果间隔增加)。但是我想这取决于因为 OP 只声明他希望它在给定时间运行 在 ,但没有说明是否因为任何原因错过了那个时间。
  • @pinkfloydx33 这只是一个例子。 OP 更了解需求。我个人会说,用户的意思是在特定时间运行任务On。但是实现也可以简单地更改以满足您的要求:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-06
  • 2018-11-04
  • 1970-01-01
  • 2014-05-12
  • 2013-08-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多