子线程的Abort() 为什么会影响主线程的运行?

tina2elva 2010-06-28 11:42:14
子线程的Abort() 为什么会影响主线程的运行?
static void Main(string[] args)
{

Thread t = new Thread(MainThreadWork);
t.Start();
Console.WriteLine("Main Start");
Thread.Sleep(1000);
t.Abort();
Console.WriteLine("Main Abort");

Console.ReadLine();
return;
}

static void MainThreadWork()
{
Thread t = new Thread(ChildThreadWork);
t.Start();
Thread.Sleep(1000);
t.Abort();
Console.WriteLine("Main Thread Work");
}

static void ChildThreadWork()
{
Console.WriteLine("Child Thread Work");
}

结果Console.WriteLine("Main Thread Work"); 不会运行 这是为什么?
...全文
86 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
永生天地 2010-06-28
  • 打赏
  • 举报
回复
我运行没问题呀
tina2elva 2010-06-28
  • 打赏
  • 举报
回复
自己顶
tina2elva 2010-06-28
  • 打赏
  • 举报
回复
这个模拟的 不对 ,另贴代码:

public abstract class TaskThread
{
protected Thread thread;
protected bool IsThreadRunning;
protected int threadInterval;
protected Int64 TaskID;
private bool isPaused = false;
private bool isCompleted = false;
private static object m_eventLock = new object();

protected void InitTaskThread()
{
thread = new Thread(ThreadWork);
}

public void Start()
{
if (!isPaused)
{
IsThreadRunning = true;
thread.Start();
}
else
{
isPaused = false;
IsThreadRunning = true;
}
}

public void Pause()
{
isPaused = true;
IsThreadRunning = false;
while (true)
{
if (isPaused)
{
break;
}
}
}

public void Stop()
{
Interrupt();
}

protected void Interrupt()
{
IsThreadRunning = false;
while (true)
{
if (IsStopped)
{
OnAborted(null);
Thread.Sleep(1000);
thread.Abort();
break;
}
}

}

protected void Complete()
{
IsStopped = true;
isCompleted = true;
Interrupt();
OnCompleted(null);

}

public bool IsCompleted
{
get { return isCompleted; }
}

public bool IsStopped
{
get;
set;
}

protected abstract void ThreadWork();

#region 事件

/// <summary>
/// 分解任务采集完成事件
/// </summary>
private event EventHandler<TaskEventArgs> e_Completed;
public event EventHandler<TaskEventArgs> Completed
{
add { lock (m_eventLock) { e_Completed += value; } }
remove { lock (m_eventLock) { e_Completed -= value; } }
}

protected virtual void OnCompleted(TaskEventArgs e)
{
if (e_Completed != null)
{
e_Completed(this, e);
}
}

/// <summary>
/// 任务线程终止事件
/// </summary>
private event EventHandler<TaskEventArgs> e_Aborted;
public event EventHandler<TaskEventArgs> Aborted
{
add { lock (m_eventLock) { e_Aborted += value; } }
remove { lock (m_eventLock) { e_Aborted -= value; } }
}

protected virtual void OnAborted(TaskEventArgs e)
{
if (e_Aborted != null)
{
e_Aborted(this, e);
}
}
#endregion
}


class Program
{
static void Main(string[] args)
{
Thread t = new Thread(MainWork);
t.Start();
Console.ReadLine();
}

static void MainWork()
{
Task1 task = new Task1();
task.Completed += new EventHandler<TaskEventArgs>(task_Completed);
task.Start();
}

static void task_Completed(object sender, TaskEventArgs e)
{
Console.WriteLine("Task1 Completed");
}
}

class Task1 : TaskThread
{
public Task1()
{
InitTaskThread();
}

protected override void ThreadWork()
{
Console.WriteLine("Task1 Thread Working");
Complete();
}
}

Console.WriteLine("Task1 Completed");
为什么不执行

17,740

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧