一组时间之间的随机睡眠

时间:2013-03-09 11:25:11

标签: c#

我想创建一个程序,当用户点击开始按钮时,程序将在3秒到10秒之间休眠,然后会出现一个按钮,允许用户点击该按钮,然后时间将打印出来并告诉用户用户点击按钮需要多长时间。

我知道我需要使用Thread.Sleep()Environment.TickCount()

问题是我不知道如何使程序在3-10秒内随机休眠

谢谢你的回答。一切都在发挥作用,但是出现了一个小问题

问题是第一个标签没有写出“准备就绪......”但是在打印出“准备就绪......”之前它会睡3到10秒。我想要的是该程序打印出“准备好......”,然后进入睡眠状态3-10秒。

以下是代码:

    //Starts the count
    private void btnStart_Click(object sender, EventArgs e)
    {
        label1.Text = "Get ready...";

        //Generate random sleeptime
        Random waitTime = new Random();
        seconds = waitTime.Next(3 * 1000, 11 * 1000);

        //Put the thread to sleep
        System.Threading.Thread.Sleep(seconds);

        //Show the button
        btnNow.Show();
        label2.Text = "NOW!";

        //Count the time in milliseconds
        start = Environment.TickCount;
    }

3 个答案:

答案 0 :(得分:6)

您必须使用Random类:

Random rnd = new Random();
int number = rnd.Next(3,11);

看一下参考文献: http://msdn.microsoft.com/en-US/library/2dx6wyd4.aspx

请注意,第一个整数参数是包含的,而第二个参数是独占的。所以你必须使用11而不是10.(如果你想排除10秒,你必须将其改为“10”)。

您可以将此数字乘以1000以获得毫秒值,并使用具有该值的Thread.Sleep。

答案 1 :(得分:4)

使用

Random random = new Random();
mseconds=random.Next(3, 10) * 1000;   
System.Threading.Thread.Sleep(mseconds);

答案 2 :(得分:0)

文本未更改的原因是因为您将gui线程置于睡眠模式。 您可以在更改标签文本后通过调用Application.DoEvents方法来解决此问题,但最好在单独的线程中进行计数。