2011-02-15 5 views
0

두 개의 입력 함에서 사용자 이름과 암호를 사용하는 workerthread가 있지만 사용자 이름/암호가 비어 있으면 작업을 중지하고 싶습니다.스레드를 중지/시작하는 방법은 무엇입니까?

Suspend() 메소드를 사용해 보았지만 intellisens가 구형이라고 알려줍니다. 어떻게하면 스레드를 중지/시작합니까?

+0

스레드가 사용자 이름과 암호를 "가져 오는"방식은 무엇입니까? 어떻게 스레드를 시작합니까? 스레드를 시작할 수 없습니까? –

+1

더 흥미롭게도, 당신이 이것을하기 위해 스레드를 생성하는 이유는 ... –

+1

지금까지 가지고있는 코드를 보여줄 수 있습니까? 아마도 당신이 원하는 것을 더 분명하게 할 수있을 것입니다. –

답변

2

왜 입력을 얻기 위해 스레드가 필요한지 알 수 없지만 작업이 완료 될 때마다 스레드에서 돌아와서 스레드를 중지해야합니다. 그냥 죽여서는 안됩니다.

if(!validInput(username, password)) 
    return; // et voila 

편집 : 당신이 (같은 자바 통지/일시 정지/다시 시작 또는 대기) 이상의 스레드를 동기화하려는 경우, MSDN에서이 정보가 유용 할 수 있습니다

것은 Thread.suspend이있다 더 이상 사용되지 않습니다. 의 다른 클래스를 사용하십시오. 뮤텍스, 이벤트 및 세마포를 에 동기화하거나 리소스를 동기화하는 등의 System.Threading을 사용하십시오. http://go.microsoft.com/fwlink/?linkid=14202

1

당신은 Thread.Abort() 방법을 사용할 수 있지만 인해 심하게 스레드를 종료에 일관성이 공유 상태로 이어질 수 있습니다. 더 나은 대안은 CancellationToken을 사용하여 공동 종료를 사용하는 것입니다.

// Create a source on the manager side 
var source = new CancellationTokenSource(); 
var token = source.Token; 

var task = Task.Factory.StartNew(() => 
{ 
    // Give the token to the worker thread. 
    // The worker thread can check if the token has been cancelled 
    if (token.IsCancellationRequested) 
    return; 

    // Not cancelled, do work 
    ... 
}); 

// On the manager thread, you can cancel the worker thread by cancelling the source 
source.Cancel(); 
+1

Thread.Abort()는 악마입니다 –

+0

그 이유는 그가 그것을 언급 @steve – atamanroman

관련 문제