2012-03-18 55 views
0

如果我这样做somtheing这样的:从另一个线程开始新theard并中止其C#

new Thread(DoWork).Start(); 

void DoWork(){new Thread(DoMoreWork).Start();} 

和我中止运行DoWork的是DoMoreWork也将中止第一线? 如果不是我如何中止秒线程(DoMoreWork)?

谢谢!

更新:

,我运行脚本Microsoft.Scripting,为此我开始一个新的线程调用从Microsot.ScriptingExecute()方法,我希望能够中止脚本的问题。我可以放弃我的线程,但我不知道哪个线程执行create来运行脚本。

回答

0

这是一个糟糕的设计...

,你不应该这样做,因为如果第二个线程还挂在第一不会关闭,你的GC将不干净的资源AKA死锁

线程是为了并行运行并且不在层次结构中同步。

那里你可以找到一个很好的指导.NET线程: http://www.albahari.com/threading/

+0

它不是我的设计,我必须像它一样使用它...无论如何,我与Microsoft.Scripting运行脚本的问题,并为此我开始新线程调用执行(),我想能够中止脚本 – Maya 2012-03-18 10:13:11

0
  1. 中止“父”线程不会停止的“孩子”。

  2. 使用Thread.Abort是一个坏主意。你应该设计你的线程优雅地退出:例如,请参阅this question的答案。

如果你设计你的线程优雅地退出(例如当你发出一个事件的信号),这也将允许你杀死两个线程。

+1

请参阅我的更新 – Maya 2012-03-18 10:17:39

+0

@maya您是否可以选择使用任务(http://msdn.microsoft.com/en-us/library/system.threading.tasks.task.aspx)?任务将允许您创建在父母死亡时死亡的子任务(并且还支持取消标记,几乎可以满足您的所有需求) – OSH 2012-03-18 10:29:57

+0

任务将完美,但我无法将其更改为任务:-( – Maya 2012-03-18 10:32:15