2010-12-09 9 views
4

스레드 죽이는 :내가 프로젝트에서 다음 코드를 일하고 있어요 한

public void Start() 
     { 
     Thread t = new Thread(NotifyIfNecessary); 
     Threads.Add(t); 
     t.Start(); 
     t.Abort()); 

     } 

내가 원하는 것은 스레드 't'메소드 NotifyIfNecessary을 실행하고 방법이 완료된 후에 만 ​​중단해야이를 실행. 현재 코드에서 t.Abort()는 조기에 호출됩니다.

+1

스레드를 중단하는 이유가 있습니까? 메소드는 메소드가 실행을 완료 한 후에 자동으로 종료되어야합니다. –

+0

예 ... 메서드 실행 후 스레드가 중단된다는 사실을 놓친 것 같습니다. 감사. 당신 모두가 똑같이 말했기 때문에, 모두 upvoted 그리고 첫 번째 대답은 최고의 대답이 될 것입니다. 다시 한번 감사드립니다. – xbonez

답변

6

새 스레드를 만들고 시작한 다음 Thread.Abort() 메서드를 호출하여 스레드를 방금 만든 스레드에서 즉시 종료하므로이 문제가 발생합니다. 이 작업을 수행 할 필요는 없습니다. NotifyIfNecessary 실행이 완료되면 스레드가 완료됩니다. 그냥 t.Abort(); 줄을 제거하면 코드가 제대로 작동합니다.

+0

+1 대답은 완전히 맞습니다. 그러나 현재 Abort() 문을 넘어선 코드가 있거나이 메서드를 호출 한 후에 실행되면 스레드가 완료되어야합니다. 쓰레드를 t.Abort() 대신 t.Join()을 호출하여 완료하십시오. 비싸지 만 무언가를해야 할 때 즉시 결과를 얻지 않아도되므로 작업 스레드에 줄 수 있고 결과에 의존하지 않는 다른 작업을 수행 한 다음 작업이 완료되었음을 보증 할 때 유용합니다 결과를 사용하십시오. – KeithS

4

abort는 실패한 사용자 코드에만 적용되므로 (별도의 appdomain 내에서 실행) abort를 먼저 호출해서는 안됩니다. 귀하의 경우, NotifyIfNecessary가 완료까지 실행되도록 허용하십시오 (즉, 중단을 호출하지 않음). 끝난.

하지만 실제로하려고하는 것은 NotifyIfNecessary가 완료 될 때까지 주 스레드가 진행되지 않도록하는 것입니다. 그렇다면 Thread "Join"을 호출하십시오.

3

NotifyIfNecessary가 끝날 때 스레드가 자동으로 중지되므로 Abort를 호출 할 필요가 없습니다.

3

NotifyIfNecessary가 완료되도록하려면 스레드를 중단하지 마십시오. NotifyIfNecessary를 완료 한 후에 만 ​​함수를 계속하려면 조인을 사용하거나 다른 스레드에서 함수를 호출하지 마십시오.

3

Abort()으로 전화 할 필요가 없습니다. NotifyIsNeccessary이 완료되면 스레드가 완료됩니다. 스레드가 완료 될 때까지 Start() 끝에서 기다리고 싶습니까?

관련 문제