Thread 클래스 - 예제로 배우는 C# 프로그래밍

예제로 배우는 C# 프로그래밍
  • C# 문법
  • C# 최신기능
  • C# 윈폼
  • 코딩가이드
  • C# 데이타
  • C# 활용
  • C# 개발팁
  • C# 자료구조
  • C# 멀티쓰레딩
  • C# 권장도서
  • C# 웹프로그래밍
  • C# 네트워크
  • C# 알고리즘 퀴즈
  • C# 비트코인
  • 개발자노트
  • C# 실수
  • C# 스토리
  • C# 초보캠프
C# C# 멀티쓰레딩
Thread 클래스
Thread 클래스(2)
ThreadPool 클래스
비동기 델리게이드
BackgroundWorker
Task 클래스
Task Of T 클래스
Parallel 클래스
C# 5.0 await
C# 타이머
UI 쓰레드
쓰레드 동기화
C# lock 블럭
Monitor 클래스
Mutex 클래스
Semaphore 클래스
AutoResetEvent클래스
ManualResetEvent
CountdownEvent
C#으로 이해하는 자료구조 C# 프로그래밍 기초 실습 전자책 C# 쓰레드의 생성 (Thread 클래스) C#에서 쓰레드를 만드는 기본적인 클래스로 System.Threading.Thread라는 클래스가 있다. 이 클래스의 생성자(Constructor)에 실행하고자 하는 메서드를 델리게이트로 지정한 후, Thread클래스 객체에서 Start() 메서드를 호출하면 새로운 쓰레드가 생성되어 실행되게 된다. 아래 예는 동일 클래스 안의 Run() 메서드를 실행하는 쓰레드를 하나 생성한 후 실행시키는 예제이다. 예제에서는 기본적으로 생성된 메인 쓰레드에서도 동일하게 Run()메서드를 호출하고 있으므로, Begin/End문장이 2번 출력되고 있는데, 이는 2개의 쓰레드가 동시에 한 메서드를 실행하고 있기 때문이다.

예제

namespace MultiThrdApp { using System; using System.Threading; class Program { static void Main(string[] args) { new Program().DoTest(); } void DoTest() { // 새로운 쓰레드에서 Run() 실행 Thread t1 = new Thread(new ThreadStart(Run)); t1.Start(); // 메인쓰레드에서 Run() 실행 Run(); } // 출력 // Thread#1: Begin // Thread#3: Begin // Thread#1: End // Thread#3: End void Run() { Console.WriteLine("Thread#{0}: Begin", Thread.CurrentThread.ManagedThreadId); // Do Something Thread.Sleep(3000); Console.WriteLine("Thread#{0}: End", Thread.CurrentThread.ManagedThreadId); } } }
C# 유튜브 강의 C# 동영상 강의 : C# Thread 사용하기 [레벨] 고급 [C# Advanced] 쓰레드(Thread)의 기본 개념과 C# 에서 쓰레드를 사용하는 방법에 대해 자세히 설명합니다.
C# 쓰레스 생성의 다양한 예제 이 섹션은 .NET의 Thread 클래스를 이용해 쓰레드를 만드는 다양한 예를 들고 있다. Thread클래스의 생성자가 받아들이는 파라미터는 ThreadStart 델리게이트와 ParameterizedThreadStart 델리게이트가 있는데, 이 섹션은 파라미터를 직접 전달하지 않는 메서드들에 사용하는 ThreadStart 델리게이트 사용 예제를 보여준다. ThreadStart 델리게이트는 public delegate void ThreadStart();와 같이 정의되어 있는데, 리턴값과 파라미터 모두 void임을 알 수 있다. 따라서 파라미터와 리턴값이 없는 메서드는 델리게이트 객체로 생성될 수 있다. 아래 예에서 보이듯이, ThreadStart 델리게이트를 만족하는 다른 방식들 즉, 익명 메서드, 람다식 등도 모두 사용할 수 있다.

예제

class Program { static void Main(string[] args) { // Run 메서드를 입력받아 // ThreadStart 델리게이트 타입 객체를 생성한 후 // Thread 클래스 생성자에 전달 Thread t1 = new Thread(new ThreadStart(Run)); t1.Start(); // 컴파일러가 Run() 메서드의 함수 프로토타입으로부터 // ThreadStart Delegate객체를 추론하여 생성함 Thread t2 = new Thread(Run); t2.Start(); // 익명메서드(Anonymous Method)를 사용하여 // 쓰레드 생성 Thread t3 = new Thread(delegate() { Run(); }); t3.Start(); // 람다식 (Lambda Expression)을 사용하여 // 쓰레드 생성 Thread t4 = new Thread(() => Run()); t4.Start(); // 간략한 표현 new Thread(() => Run()).Start(); } static void Run() { Console.WriteLine("Run"); } } C# 쓰레스 생성 예 - 다른 클래스 메서드 동일 클래스가 아닌 다른 클래스의 메서드를 쓰레드에 호출하기 위해서는 해당 클래스의 객체를 생성한 후 (혹은 외부로부터 전달 받은 후) 그 객체의 메서드를 델리게이트로 Thread에 전달하면 된다.

예제

class Helper { public void Run() { Console.WriteLine("Helper.Run"); } } class Program { static void Main(string[] args) { // Helper클래스의 Run메서드 호출 Helper obj = new Helper(); Thread t = new Thread(obj.Run); t.Start(); } }
C# 유튜브 강의 C# 동영상 강의 : C# 접근 제한자 (Access Modifier) 의 개념과 사용법 [레벨] 중급 [C# 중급] C# 에서 사용하는 접근 제한자 (Access Modifier) 의 개념과 private, public, internal, protected 를 언제, 어떻게 사용하는지에 대해 자세히 설명합니다.
본 웹사이트는 광고를 포함하고 있습니다. 광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다. 이전 코멘트 모두 보기
Comment antiprotct@*** 11/15/2017 12:09:09 AM
답변 감사합니다. 실제로 업무에 사용할때는 위와 같은 형태로 사용하는것은 스레드 컨트롤이 안되니 위험할 수 있겠네요
Comment 1012yhs@*** 11/20/2017 6:44:57 AM
안녕하세요. 현재 윈도우 폼 타이머를 사용해서 UI 에 1초마다 시계를 나타내주고 있고 쓰레딩 쓰레드를 사용해서 NAudio dll을 통해 mp3를 틀고 있는데 문제는 UI에서 돌고 있는 timer 때문에 mp3소리가 딱딱 끊겨서 들립니다 이 문제를 어떻게 해결하면 좋을까요... 일단 임시방편으로 mp3를 틀 때 Ui timer를 정지시키고 들고 있는데 그렇게 하면 당연히 ui에서 음악이 끝날 때까지 시계가 업데이트 되지 않습니다. 저는 동시에 돌리고 싶은데 어떻게 하면 좋을까요?
Comment admin@*** 11/20/2017 7:59:15 PM
@1012yhs: 혹시 mp3가 UI 쓰레드에서 돌고 있는 거 아닌가요? 백그라운드 쓰레드에서 돌고 있다면, 서로 interrupt를 안 할텐데요..
Comment shjolk@*** 1/6/2019 6:00:49 AM
안녕하세요~ 선생님~ static void Main(string[] args) 안에서 } new Program().DoTest(); //이렇게 쓰셨는데, } -------------- static void Main(string[] args) { DoTest(); // 이렇게 쓰는 것과 차이점이 무엇인가요? }
Comment admin@*** 1/6/2019 3:26:01 PM
@shjolk: Main() 메서드가 static 메서드이기 때문에 DoTest()가 static void DoTest() 와 같이 static 메서드로 정의되면, DoTest();와 같이 직접 호출할 수 있습니다. 위 예제는 void DoTest() 와 같이 static 메서드가 아니라 인스턴스 메서드이기 때문에 new Program().DoTest(); 와 같이 먼저 객체를 생성해서 호출하는 것입니다.
"예제로 배우는" 시리즈
  • 예제로 배우는 Python
  • 예제로 배우는 GO 프로그래밍
  • 예제로 배우는 SQL 프로그래밍
  • 예제로 배우는 Rust
  • Crypto 스터디 (암호학/암호화폐)
예제로 배우는 C# 프로그래밍 유튜브 강의 유용한 외부 링크
  • C# Tips / 퀴즈
  • 성태의 닷넷이야기
  • .NET 관련 블로그
  • WinDbg 디버깅 사이트
  • 온라인 HTML 인코더
  • SQL 개발자를 위한 String Pad
Home | Privacy
Copyright © 2011-2025 CSHARPSTUDY.COM

Tag » What Is Thread In C#