如何在单个标签上打印多个号码

时间:2017-05-13 18:18:21

标签: c#

看完Futurama第三次或第四次开始结束后,我决定尝试从剧集"两个圣诞老人的故事"中编写随机数倒数发生器。当我第一次开始这个项目时,我一开始只显示一个单一的数字,在这一步骤中程序看起来运行得很好。然后我开始尝试让我的显示器与剧集中的显示器匹配,每个数字之间有第二个延迟。在我添加代码后,我的程序不会显示任何数字,直到它达到零,然后关闭程序。相反,当我第一次点击我的按钮时,它会显示" label"在第一秒然后它切回到实验室"或" la"信的一半直到达到零。我没有关于为什么会发生这种情况的线索,并且会理解为什么会发生这种情况的任何输入。我的代码如下。

namespace FuturomaRandomNumberCountDown
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        bool keepRunning = true; //used for loop kickout
        private void start_Click(object sender, EventArgs e)
        {
            while (keepRunning == true)
            {
                Random random = new Random((int)DateTime.Now.Ticks);
                int randomNum = random.Next(0, 99);

                display.Text = Convert.ToString(randomNum);/display number
                Thread.Sleep(1000);//delay

                if(randomNum==0)//check for zero
               { keepRunning = false; }//to kick out of the while loop
            }
            Application.Exit();
        }
    }
}

1 个答案:

答案 0 :(得分:1)

它与线程以及Thread.Sleep实际执行的操作有关。当您运行程序时,所有与GUI相关的代码都在同一个线程上运行。这是运行所有事件代码的相同线程,因此当您在事件代码中执行某些处理时,GUI将不会更新,直到该代码返回。

在您的情况下,您循环遍历要在同一while循环中显示的每个值。这会占用程序的主线程,并且它不会让GUI有机会在每次更改之间进行更新。另外,当你调用Thread.Sleep时,会暂停当前线程,在这种情况下是你的主线程。这具有暂停整个程序的效果。

为了做你想做的事,你需要做两件事之一。 use multithreading to put your random number generator on a different threaduse a Timer object to handle your refreshing