gpt4 book ai didi

c# - 使用循环接触 pictureBoxes

转载 作者:行者123 更新时间:2023-11-30 13:57:56 28 4
gpt4 key购买 nike

我有 pictureBox1, pictureBox2, picturebox3, .... 在 C# 中,有没有办法可以循环更改第一个 picturebox 的背景颜色,然后等待,然后更改 pictureBox2 的背景?

应该是这样的

    private void button1_Click(object sender, EventArgs e)
{
foreach (var pb in this.Controls.OfType<PictureBox>())
{
pb.BackColor = Color.Red;
Thread.Sleep(2000);
}
}

但是我得到了这个错误

Error 1 Non-invocable member 'System.Windows.Forms.Control.Controls' cannot be used like a method. C:\Users\test\Desktop\WindowsFormsApplication1\Form1.cs 22 37 WindowsFormsApplication1

最佳答案

尝试使用线程池(正如一些人所指出的,这可能会导致线程异常,尽管它对我的测试或对您都没有...我相信这将取决于您从何处调用此代码):

ThreadPool.QueueUserWorkItem(_ =>
{
foreach (var pb in this.Controls.OfType<PictureBox>())
{
pb.BackColor = Color.Red;
Thread.Sleep(2000);
}
});

回复 Jeff Bridgman:

我也很惊讶他没有得到异常,但我测试了它并且工作正常。只是为了完整性(它可能会导致异常,具体取决于调用此代码的位置),这是一个安全的版本:

ThreadPool.QueueUserWorkItem(_ =>
{
foreach (var pb in Controls.OfType<PictureBox>())
{
var pb1 = pb;
pb1.BeginInvoke((Action) (() =>
{
pb1.BackColor = Color.Red;
}));
Thread.Sleep(2000);
}
});

请注意我为什么在循环中使用 var pb1 = pb;(我从一位同事那里得到了这个问题)。 Here是来自 ReSharper wiki 的一个很好的解释。

关于c# - 使用循环接触 pictureBoxes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19209697/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com