c#winform中的无限循环



我的C#winform应用中需要无限循环

while(true)不工作。我听说过计时器,但我不知道如何将其用于无穷循环我想在循环中运行此代码

BackColor = Color.White;
Thread.Sleep(1000);
BackColor = Color.Black;
Thread.Sleep(1000);```

这里我为您制作了一个示例。它将以1秒的周期更改BackColor

你可以用_changeBackGround控制它,也可以用_tmr.Stop()停止计时器

private readonly Timer _tmr = new Timer { Interval = 1000 };
private bool _changeBackGround = true;
public MainFrom()
{
InitializeComponent();
BackColor = Color.White;
_tmr.Tick += _tmr_Tick;
_tmr.Start();
}
private void _tmr_Tick(object sender, EventArgs e)
{
if (_changeBackGround)
{
if (BackColor == Color.White)
{
BackColor = Color.Black;
}
else
{
BackColor = Color.White;
}
}
}

正如您所注意到的,您不能在WinForms中使用无限循环,因为这不允许UI事件循环运行和处理事情。

所以,

while(true) {
BackColor = Color.White;
Thread.Sleep(1000);
BackColor = Color.Black;
Thread.Sleep(1000);
}

可以重新表述为以间隔1000运行的计时器,其Tick事件进行

BackColor = BackColor == Color.White ? Color.Black : Color.White;

也就是说,每次刻度运行时,您都会查看背景当前是否为黑色,如果是,则将其变为白色,反之亦然。

当然,你也可以用一个单独的变量来跟踪你想要的颜色。

最新更新