在C#中挂起一个线程:错误

时间:2013-11-02 23:26:32

标签: c# multithreading suspend

我正在尝试在C#中学习线程,现在正处于非常初级的水平。 我编写了以下代码,以了解如何暂停线程。

但是我得到了异常' ThreadStateException未处理:Thread没有运行。它无法暂停'

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace Thread_Suspend
{
class Program
{
    static void Main(string[] args)
    {
        Thread obj = new Thread(Function1);
        Console.WriteLine("Threading Starts..\n");
        obj.Start();
        Thread.Sleep(2000);
        obj.Suspend();//Exception at this line of code
        Console.WriteLine("Thread suspended");
    }
    static void Function1()
    {
        for (int i = 0; i < 5; i++)
        {
            Console.WriteLine("Thread displayed for: " + i + "time");
        }
        Console.WriteLine("\nThreading done");
    }
}
}

我的理解是,当控制台打印“线程显示”5次时,线程将进入休眠状态2000毫秒,后者将进入暂停状态,但不会发生。我相信我在这里错过了一些关键概念。 此外,我使用VS 2010与.NET 4.0作为目标框架。专家请指导。任何帮助都将受到高度赞赏。

此致

阿努拉格

2 个答案:

答案 0 :(得分:3)

  

我的理解是,当控制台打印出“线程显示”时。   5次,线程将进入休眠状态2000毫秒,

没有。当线程打印&#34; 5次&#34;然后&#34;线程完成&#34;它将终止并停止存在。错误消息抱怨您无法暂停不再存在的内容。

Thread.Sleep(2000)一起入睡的是你的主要线程:它启动第二个线程,然后进入睡眠状态2秒。第二个线程有足够的时间来完成一个5迭代循环,所以当主线程恢复并调用obj.Suspend时,第二个线程就已经很久了。

答案 1 :(得分:0)

线程一完成作业就会自动暂停。在您的情况下,它会非常快速地执行Function1并自动暂停。