Abort를 호출하여 다른 스레드에서 스레드를 종료하는 방법을 사용하면
스레드의 작업이 완료되었는지 여부와 관계없이 스레드가 종료되어
리소스를 정리할 수도 없다.
아래와 같은 방식으로 종료하자. (펌: MSDN)
using System; using System.Threading; public class Worker { // This method will be called when the thread is started. public void DoWork() { while (!_shouldStop) { Console.WriteLine("worker thread: working..."); } Console.WriteLine("worker thread: terminating gracefully."); } public void RequestStop() { _shouldStop = true; } // Volatile is used as hint to the compiler that this data // member will be accessed by multiple threads. private volatile bool _shouldStop; } public class WorkerThreadExample { static void Main() { // Create the thread object. This does not start the thread. Worker workerObject = new Worker(); Thread workerThread = new Thread(workerObject.DoWork); // Start the worker thread. workerThread.Start(); Console.WriteLine("main thread: Starting worker thread..."); // Loop until worker thread activates. !..작업자 스레드가 실행되기도 전에 Main함수가 이 스레드를 종료하지 않도록 하기 위해..!
while (!workerThread.IsAlive); // Put the main thread to sleep for 1 millisecond to // allow the worker thread to do some work: Thread.Sleep(1); // Request that the worker thread stop itself: workerObject.RequestStop(); // Use the Join method to block the current thread // until the object's thread terminates. workerThread.Join(); Console.WriteLine("main thread: Worker thread has terminated."); } }
출처: https://msdn.microsoft.com/ko-kr/library/7a2f3ay4(v=VS.90).aspx
Fin.
잘 못 된 정보가 있으면 말씀해주세요~
1초도 걸리지 않는 공감버튼 클릭은 작성자에게 큰 힘이 됩니다.
'C#' 카테고리의 다른 글
[C#] 데이터그리드뷰 선택한 행 값 추출 DataGridView (0) | 2015.07.30 |
---|---|
[C#] 세자리마다 콤마 (0) | 2015.07.30 |
[C#] convert int to binary (0) | 2015.07.27 |
[C#] 프로세스 실행중인지 여부 확인 (0) | 2015.07.22 |
[C#] double to datetime (0) | 2015.07.22 |