代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace ConsoleApplication1
{
public class Alpha
{
public void Beta()
{
while (true)
{
Console.WriteLine("Alpha.Beta is running in its own thread.");
}
}
}
public class Simple
{
public static int Main()
{
Console.WriteLine("Thread Start/Stop/Join Sample");
Alpha oAlpha = new Alpha();
Thread oThread = new Thread(new ThreadStart(oAlpha.Beta));
oThread.Start();
Thread.Sleep(5000);
while (!oThread.IsAlive)
Thread.Sleep(1000);
oThread.Abort();
oThread.Join();
Console.WriteLine();
Console.WriteLine("Alpha.Beta has finished");
try
{
Console.WriteLine("Try to restart the Alpha.Beta thread");
Thread.Sleep(5000);
oThread.Start();
}
catch (ThreadStateException)
{
Console.Write("ThreadStateException trying to restart Alpha.Beta. ");
Console.WriteLine("Expected since aborted threads cannot be restarted.");
Console.ReadLine();
}
return 0;
}
}
}
有点不明白的就是明明程序已经运行到"Alpha.Beta has finished"这里了,请问运行到这里的时候oThread线程已经被终止了对吗?它是在oThread.Join()之后的。。所以我认为它一定是终止了的,接下来在try里重新启动线程的时候就发异常了。。如图,请问为什么会这样呢?
已经Aborted的Thread是不能再Start的。还有,用Thread.Abort去终止一个线程是很糟糕的做法。当你使用多线程时,要记住“让线程自己去控制自己的所有资源,包括它的生命周期”。
怎样才能用“让线程自己去控制自己的所有资源”,还有他的生命周期?求解释!!!
Thread.Abort () | 在调用此方法的线程上引发 ThreadAbortException,以开始终止此线程的过程。调用此方法通常会终止线程。
由 .NET Compact Framework 支持。 |
Thread.Abort (Object) | 在调用此方法的线程上引发 ThreadAbortException,以开始终止此线程并提供有关线程终止的异常信息的过程。调用此方法通常会终止线程。
由 .NET Compact Framework 支持。 |
泼出去的水还能回到盆里么?
想让线程可以重新继续就暂停线程...