2013-10-10 2 views
3

스레드 이름을 사용하여 스레드를 중단시킬 수 있는지 궁금합니다. 여기에 몇 가지 예제 코드가 있습니다 :이름을 통해 스레드를 중단하는 중

public void blah() { 
    int TableID = 4; //set by the using at runtime 

    Thread myThread = new Thread(() => beginUser(picture)); 
    myThread.Name = Convert.ToString(TableID); 
    myThread.Start(); 
} 

이제 스레드를 만들었습니다. 나중에 프로그램에서 사용자가 스레드를 종료 할 수 있습니다, 거기에 내 질문에 온다. 어떻게 이름을 통해 스레드를 종료 할 수 있습니까? 아니면 그것을 끝내는 또 다른 방법일까요? 나는 backround worker를 사용하고 싶지 않다.

예 : myThead[4].Abort();

덕분에 간단하게 매핑 스레드와 당신이 원하는 목적지에서 죽일 threadname를 저장하기 위해 사전을 사용하지 왜

+0

이 스레드의 수명은 얼마나됩니까? 중 Dictionary 에있는 스레드를 매핑하고 있습니까? 모든 이름이 고유 할 것입니까? – ilansch

+0

가장 간단한 방법은 사전별로 추적하는 것입니다 (예 :'Dictionary '). 또 다른 방법은'Process.Threads'로 파헤치는 것입니다. 그러나 처음에는 왜 그걸 필요로합니까? – Leri

+0

@Leri 내 프로그램은 바를 사용하여 풀 테이블 사용을 관리합니다. 그들은 큰 테이블과 작은 테이블을 가지고, 내 프로그램은 동적으로 양식 패널에 새 테이블을 추가 할 수있게 해줍니다. 그러면 새 스레드가 시작될 것이고이 스레드에서는 프로그램이 계산을 할 것입니다. 비용을 절감 할 수 있습니다.) 고객이 사용을 마쳤을 때 바 직원이 양식을 마우스 오른쪽 버튼으로 클릭하고 테이블의 이미지를 제거하고 제거하면 나에게 실을 끝내야합니다. 원한다면 어떻게 든 전체 프로그램을 보낼 수 있습니다. – user2864613

답변

5

.

Dictionary<string, Thread> threadDictionary = new Dictionary<string, Thread>(); 
Thread myThread = new Thread(() => beginUser(picture)); 
myThread.Name = Convert.ToString(TableID); 
myThread.Start(); 
threadDictionary.Add("threadOne", myThread); 

threadDictionary["threadOne"].Abort(); 
+0

Perfect! ;) exacly 내가 뭘 필요 :) 감사합니다. – user2864613

+0

코드 수정 주셔서 감사합니다 :) –

3

나는 당신이 무슨 뜻인지 모르겠다. 나중에 다른 방법으로 스레드를 중단 하시겠습니까? 이 경우 작동합니다 :

Thread myThread;  
public void blah() { 
    int TableID = 4; //set by the using at runtime 

    myThread = new Thread(() => beginUser(picture)); 
    myThread.Name = Convert.ToString(TableID); 
    myThread.Start(); 
} 

public void blub() { 
    myThread.Abort(); 
} 
+0

이것은 올바른 접근 방법입니다. 나중에 스레드로 작업해야하는 경우 익명 스레드 또는 로컬 변수를 사용하지 마십시오. – Sinatr