
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 methodprivate 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); }} 总结 以上是内存溢出为你收集整理的从C#WinForm应用程序中的循环更改标签背景颜色全部内容,希望文章能够帮你解决从C#WinForm应用程序中的循环更改标签背景颜色所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)