微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从C#WinForm应用程序中的循环更改标签背景颜色

我的应用程序中有一系列标签

Label[] labels = new Label[8];

我想按顺序改变循环中那些的背景颜色 –

private void btnPrepare_Click(object sender,EventArgs e)
    {
        Application.DoEvents();
        for (int i = 0; i < 8; i++)
        {
           labels[i].BackColor = System.Drawing.Color.Red;
           System.Threading.Thread.Sleep(2000);
        }
    }

但所有变化都是一起出现的,而不是顺序出现的.

有帮助吗?

解决方法

就像这样(快速修正):

private void btnPrepare_Click(object sender,EventArgs e) { 
  //DONE: foreach - no magic numbers (8)
  foreach (var lbl in labels) {
    lbl.BackColor = System.Drawing.Color.Red;
    lbl.Update(); // <- Update == force label repainting

    System.Threading.Thread.Sleep(2000);
  }
}

Application.DoEvents()是邪恶的:当你想要绘画时,它会翻译所有事件,比如表格结束.

更好的方法是使用Task而不是Thread:

// async: we're going to put await in the method
private async void btnPrepare_Click(object sender,EventArgs e) { 
  //DONE: foreach - no magic numbers (8)
  foreach (var lbl in labels) {
    lbl.BackColor = System.Drawing.Color.Red;

    // await: No need in force repainting,messages translating etc.
    await Task.Delay(2000);
  }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐