2012-03-18 53 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