2012-03-18 5 views
0

을 중단 내가 같이 somtheing 경우 :다른 스레드에서 새로운 theard 시작과 C#

new Thread(DoWork).Start(); 

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

을하고 난 DoMoreWork도 중단됩니다있다 DoWork를 처음 실행 스레드를 중단? 만약 내가 어떻게하면 스레드 (DoMoreWork)를 중단 할 수 있습니까?

감사합니다.

업데이트 :

내가 Microsoft.Scripting으로 스크립트를 실행하고이를 위해 내가 Microsot.Scripting에서 Execute() 메소드를 호출하여 새 스레드를 시작하고 나는 스크립트를 중단 할 수 있도록하려는 문제. 내 스레드를 중단 할 수 있지만 어떤 스레드 실행 스크립트를 실행하려면 만들지 모르겠다.

답변

0

이 나쁜 디자인 ...

당신이하지 말아야 할

두 번째 스레드는 첫 닫히지하지 중단하고 GC가없는 깨끗한 자원 AKA 스레드에 의미

교착 상태 때문에 경우에 그 병렬로 실행하고 계층 구조와 동기화하지 마십시오. 은 "부모"를 중단 http://www.albahari.com/threading/

+0

내 디자인이 아니므로 사용해야합니다 ... 어쨌든 Microsoft.Scripting을 사용하여 스크립트를 실행하고이 때문에 Execute()를 호출하는 새 스레드를 시작하고 중단 할 수 있기를 원합니다. 스크립트 – Maya

0
  1. 스레드가 "아이를"멈추지 않을 것입니다 :

    이 당신은 .NET 스레딩 수있는 좋은 가이드를 찾을 수 있습니다.

  2. Thread.Abort를 사용하는 것은 좋지 않은 생각입니다. 스레드를 정상적으로 종료하도록 설계해야합니다 (예 : this question에 대한 응답 참조).

스레드가 정상적으로 종료되도록 디자인하면 (예 : 이벤트 신호를 보낼 때) 두 스레드를 모두 종료 할 수 있습니다.

+1

내 업데이트 – Maya

+0

@maya를 참조하십시오. 대신 작업 (http://msdn.microsoft.com/en-us/library/system.threading.tasks.task.aspx)을 사용할 수 있습니까? 작업을 통해 부모가 사망 할 때 죽는 하위 작업을 만들 수 있습니다. 또한 필요한 토큰을 모두 처리하는 취소 토큰을 지원할 수 있습니다. – OSH

+0

작업은 완벽하지만 작업 :-( – Maya

관련 문제