切换图片框可见性C#

为什么图片框控件的可见性属性不起作用。 我最初将它们设置为false,以便在屏幕加载时它们不可见。 但后来我希望切换这个。 我做了以下但似乎没有工作。 这是一个Windows窗体应用程序。

private void Action() { while (true) { Random r1 = new Random(); int num = r1.Next(1,3); switch (num) { case 1: pictureBoxLeft.Visible = true; pictureBoxRight.Visible = true; break; case 2: pictureBoxLeft.Visible = true; pictureBoxRight.Visible = false; break; case 3: pictureBoxLeft.Visible = false; pictureBoxRight.Visible = true; break; } Thread.Sleep(200); pictureBoxLeft.Visible = false; pictureBoxRight.Visible = false; Thread.Sleep(500); } } 

还要添加,这与文本框正常工作! 有任何想法吗???

提前谢谢了

Visible属性设置为true不会显示控件,它只会创建一个显示它的消息。 只要您让主线程忙于Sleep ,它就不会处理任何消息,并且不会显示控件。

您应该显示图片框,然后设置一个计时器,其代码将在触发计时器的tick事件时隐藏图片框。 然后退出方法,以便主线程可以处理将显示图片框的消息。

这是你的UI线程。 UI线程非常繁忙,没有时间刷新显示。 UI线程忙于无休止的循环,那么如何更新UI呢?

除了Thread.Sleep(); 调用Application.DoEvents()来触发事件处理/ ui更新。 但是请确保您不会以某种方式再次调用Action() 。 一个简单的Thread.Sleep()将不允许UI更新,因为您仍然在处理程序中,并且框架将无法自行触发任何新事件,因为它不知道您是否已完成等待(由于线程仍然忙)。

总的来说,您的方法可能是一个坏主意(取决于其他代码等)。 请考虑使用计时器或后台工作程序。

只要在您进行一些更改后UI更改没有出现,请始终执行Refres() 。 例如pictureBoxLeft.Refresh(); 。 这将始终显示UI更改。 如果它适合您,请告诉我。