如何在没有thread.sleep的情况下等待应用程序内部的应用程序

时间:2017-12-22 07:29:39

标签: c#

如何在计时器内部进行循环? 如果我把这些代码放在里面,如果, 它有效,但我不想要thread.sleep

if (a==true)
{
no color codes
System.Threading.Thread.Sleep(300);
green color codes
System.Threading.Thread.Sleep(300);
}

但我想在没有thread.sleep的情况下制作

time = Function.Get_Server_Time(false);
dServer_Time = time.Rows[0]["ServerDate"].ToDateTime();
long msecs = 0;

if (dTimeDef!= null)
{
 msecs = (dServer_Time.Ticks - dTimeDef.Ticks) / 10000;
}

if (a==true)
{

 if (dTimeDef == null || msecs>500)
 {
 no color
 }
else
 {
 green color
 }
dTimeDef = dServer_Time;


}

我该如何改进它。它不像那样工作

2 个答案:

答案 0 :(得分:1)

根据您的伪代码,我认为您不需要延迟。您需要每300毫秒触发一次事件,并且您希望通过在一个控件中交替显示颜色来处理该事件。

最简单的方法是使用System.Windows.Forms.Timer并将其间隔设置为300毫秒,如下所示:

private Timer myTimer; 

public void InitTimer()
{
    myTimer = new Timer();
    myTimer.Tick += new EventHandler(myTimer_Tick);
    myTimer.Interval = 300; // in miliseconds
    myTimer.Start();
}

另外,我建议您不要将颜色视为交替颜色。将颜色视为时间的函数。示例:以下函数将返回0或1,每300毫秒交替一次:

(current milliseconds ÷ 300) mod 2

然后,您可以使用此函数的输出来确定当前颜色应该是什么。这比读取当前颜色和决定每次使用它更有效和一致。

因此您的事件处理程序可能是:

private void myTimer_Tick(object sender, EventArgs e)
{
    var green = (((float)System.Environment.TickCount / 300) % 2) != 0;
    SetColor( green ? Color.Green : Color.Empty);
}

答案 1 :(得分:0)

您可以使用await Task.Delay(*time in milliseconds*)This应该帮助你。