Thread.Sleep c#.NET

4

我希望让一个线程休眠,但是我没有找到休眠方法。

我正在使用 System.Threading 库。

在我的代码中,我写了:

Thread t = new Thread(StartPointMethod);
t.

在方法列表中没有Sleep....可能的问题是什么?请注意,Sleep()是一个延迟函数,它暂停代码执行一段时间。

哪个版本...有时候智能提示可能会出现问题。 - Sudantha
我有带SP1的VS2008 @Sudantha - N.D
1
你想要什么?你想让当前线程睡眠吗?还是你想让另一个线程睡眠? - Saleh
1
你能解释一下为什么要这样做吗?让线程休眠通常是一个非常糟糕的想法。可能有更好的方法来实现你想要的功能。 - Eric Lippert
1
@olia:如果你想在一定时间间隔内执行某些操作,请使用计时器。http://msdn.microsoft.com/zh-cn/library/system.threading.timer.aspx - Jim Mischel
显示剩余3条评论
8个回答

20

这段代码用于使当前线程休眠20秒钟。

System.Threading.Thread.Sleep(20000);

2
t.Join(20000) 不会导致另一个线程休眠,它只是等待另一个线程终止的时间长达20秒。如果线程在该期间内没有终止,Join 将返回,但另一个线程不受影响。 - Jim Mischel

12

在新线程中,如果想要让方法休眠,请使用此方法。

System.Threading.Thread.Sleep(500);

10

Sleep是'thread'的静态方法,而不是实例方法。因此,使线程休眠的方法是在执行方法内部有一个Thread.Sleep语句。

由于Thread.Sleep总是使执行线程休眠,因此可以按照以下示例进行操作。

    private void Foo()
    {
        Thread t = new Thread(new ThreadStart(ThreadWorker));
        t.Start();

        t.Join();
    }

    private void ThreadWorker()
    {
        Console.WriteLine("Prior to sleep");
        Thread.Sleep(100);
        Console.WriteLine("After sleep sleep");
    }

感谢您对Thread.Sleep的详细说明,适用于当前线程。 - Katianie

4

线程A无法告诉线程B去休眠。也就是说,你不能这样写:

Thread t = new Thread(...);
t.Start();
t.Sleep();

你可以 暂停 一个线程,然后稍后恢复它,但这是一个非常糟糕的想法。这样做会带来各种潜在灾难性后果。有一个原因,为什么 Thread.Suspend 已被弃用。
在正常代码中(即在编写调试器和操作系统级别的内容之外),几乎没有理由暂停线程。而且几乎从来没有理由调用 Thread.Sleep。如果您发现需要暂停或休眠线程,则几乎肯定存在需要解决的设计问题。

2

您需要使用以下代码:

Thread.Sleep(5);

2

为了更详细地解释上面的(正确的)答案,Thread.sleep是一个静态方法。静态方法与一个类(线程)关联,但不与类的特定实例关联。

因此,要调用Thread.Sleep - 只需编写(如上所述)“Thread.Sleep(msecs)” - 您不需要创建线程来调用该方法。


-1

Thread.Sleep(milliseconds) 允许当前线程休眠 x 毫秒。没有办法让一个线程使另一个线程休眠。Thread.Sleep 总是指当前线程。


你的回答并没有提供任何新的建议,这些建议在之前的许多回答中已经被提出了。 - EricSchaefer

-2

System.Thread有一个专门用于此的函数。

System.Threading.Thread.Sleep(100)

Sleep函数接受一个以毫秒为单位的参数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接