1

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

但我得到了异常' ThreadStateException 未处理:线程没有运行。它不能被挂起'

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 作为目标框架。请高手在这里指导。任何帮助将不胜感激。

问候

阿努拉格

4

2 回答 2

3

我的理解是,当控制台打印 'Thread display' 5 次时,线程会休眠 2000 毫秒,

不会。当线程打印“5 次”然后“线程完成”时,它将终止并不再存在。错误消息抱怨您无法暂停不再存在的内容。

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

于 2013-11-02T23:29:45.203 回答
0

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

于 2013-11-02T23:45:53.773 回答