如何在计时器内部进行循环? 如果我把这些代码放在里面,如果, 它有效,但我不想要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;
}
我该如何改进它。它不像那样工作
答案 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应该帮助你。