【问题标题】:how do i print more than one number to a single label如何在一个标签上打印多个数字
【发布时间】:2017-05-13 18:18:20
【问题描述】:

在第三次或第四次观看 Futurama 开始结束后,我决定尝试编写“两个圣诞老人的故事”中的随机数倒计时生成器。当我第一次开始这个项目时,我只开始一次显示一个数字,在这一步中,程序似乎运行得很好。然后我开始尝试让我的显示与剧集中的显示匹配,每个数字之间有第二个延迟。在我添加代码来执行此操作后,我的程序不会显示任何数字,直到它达到零然后关闭程序。相反,当我第一次单击我的按钮时,它会在第一秒显示“标签”,然后将其切回“实验室”或“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();
        }
    }
}

【问题讨论】:

  • Thread.Sleep(1000);改成await Task.Delay(1000);
  • 不回答您的问题,但您可以将 'while (keepRunning == true)' 更改为 'while (keepRunning)'

标签: c#


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-21
    相关资源
    最近更新 更多