【问题标题】:time loop c# while/if时间循环 c# while/if
【发布时间】:2013-06-22 00:59:12
【问题描述】:

我需要有关 C# 循环的帮助。循环需要做什么:

xt = 50

现在程序需要等待时间 (x = 50),每秒递减一次。如果实际时间为0,程序需要发送我的请求并设置xt = 50。所以循环可以重新开始,总而言之,这段代码应该每 50 秒检查一次以向服务器发送请求。

我的实际代码:

while (xt != 0)
{
    xt--;
    Thread.Sleep(1000);
    Console.WriteLine ("bla:"+ xt);
}

if (xt == 0)
{
    Console.WriteLine("Ich sende!");
    //post.SendPost(randomengine.decodeb64(URL2),"Alive");//richtige Daten eintragen! Idiot!
    xt = 50;
}

【问题讨论】:

  • 您正在使用抽取式 while 循环进行计时?你有什么保证你的xt 变量会每秒递减而不是每秒递减数千次?
  • System.Threading.Thread.Sleep(50000) 等待 50 秒(50000 毫秒)
  • 这确实意味着您的整个线程将停止 50 秒。
  • 此代码可以替换为for (int xt = 50; xt != 0; --xt) { Console.WriteLine("bla:" + xt); } Console.WriteLine("Ich sende!");。这不会等待 50 秒。
  • @cHao 怎么解决的?

标签: c# loops if-statement while-loop


【解决方案1】:
 DispatcherTimer tmr = new DispatcherTimer();
        tmr.Interval = TimeSpan.FromSeconds(50);
        tmr.Start();
        tmr.Tick += (sndr, ex) =>
            {
                //send request 
            };

我希望这会有所帮助,此 Tick 事件将在每 50 秒后触发一次

【讨论】:

  • 为了正确起见,您可以在启动计时器之前添加Tick 处理程序。 (这看起来像是一种竞争条件,尽管它影响任何事情的可能性非常小。)
  • @cHao 是的,你是对的,如果时间间隔太小会导致问题。
【解决方案2】:

使用计时器,例如。 System.Threading.Timer。 .Net Framework 中还有其他计时器,但根据您的问题,这似乎是最合适的。

【讨论】:

    【解决方案3】:

    if 块放入while 循环中。在你的while循环中添加Thread.Sleep(1000),并在你的if检查中将xt = xt更改为xt = 50

    您还可以使用 System.Threading.Thread.Sleep(50000) 代替 cmets 中提到的 while 循环。

    【讨论】:

    • 为什么是-1??这不是最好的,但仍然是问题的解决方案。
    • 我认为这没有什么问题。它可以工作。这不是最漂亮的解决方案,但是嘿。
    • 我在第一篇文章中更新了代码。 if 块没有重新启动:(知道为什么吗?
    • @JanisHeller 你的 if 块必须在你的 while 循环中
    • @TimothyGroote:事实上,在几乎所有情况下,它都是最丑陋的解决方案之一。唯一更难看的就是忙于等待或创建一个表单(在服务或其他东西中),其唯一目的是使用表单计时器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-26
    • 2021-03-23
    • 2023-03-22
    • 2015-05-19
    相关资源
    最近更新 更多