首页 新闻 会员 周边 捐助

C# 请问线程Abort后就永远不能Start()吗?

0
悬赏园豆:5 [已解决问题] 解决于 2011-11-18 13:27

代码如下:

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里重新启动线程的时候就发异常了。。如图,请问为什么会这样呢?
 

hexllo的主页 hexllo | 菜鸟二级 | 园豆:318
提问于:2011-11-10 17:03
< >
分享
最佳答案
1

已经Aborted的Thread是不能再Start的。还有,用Thread.Abort去终止一个线程是很糟糕的做法。当你使用多线程时,要记住“让线程自己去控制自己的所有资源,包括它的生命周期”。

收获园豆:5
水牛刀刀 | 大侠五级 |园豆:6350 | 2011-11-10 17:39

怎样才能用“让线程自己去控制自己的所有资源”,还有他的生命周期?求解释!!!

Fred_Ade | 园豆:200 (初学一级) | 2011-11-11 12:14
其他回答(2)
0
Thread.Abort () 在调用此方法的线程上引发 ThreadAbortException,以开始终止此线程的过程。调用此方法通常会终止线程。

由 .NET Compact Framework 支持。

Thread.Abort (Object) 在调用此方法的线程上引发 ThreadAbortException,以开始终止此线程并提供有关线程终止的异常信息的过程。调用此方法通常会终止线程。

由 .NET Compact Framework 支持。

悟行 | 园豆:12559 (专家六级) | 2011-11-10 17:08
0

泼出去的水还能回到盆里么? 

想让线程可以重新继续就暂停线程...

奶茶爽歪歪 | 园豆:243 (菜鸟二级) | 2011-11-11 14:10
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册