我正在尝试在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作为目标框架。专家请指导。任何帮助都将受到高度赞赏。
此致
阿努拉格
答案 0 :(得分:3)
我的理解是,当控制台打印出“线程显示”时。 5次,线程将进入休眠状态2000毫秒,
没有。当线程打印&#34; 5次&#34;然后&#34;线程完成&#34;它将终止并停止存在。错误消息抱怨您无法暂停不再存在的内容。
与Thread.Sleep(2000)
一起入睡的是你的主要线程:它启动第二个线程,然后进入睡眠状态2秒。第二个线程有足够的时间来完成一个5迭代循环,所以当主线程恢复并调用obj.Suspend
时,第二个线程就已经很久了。
答案 1 :(得分:0)
线程一完成作业就会自动暂停。在您的情况下,它会非常快速地执行Function1并自动暂停。