C\#다 중 스 레 드 의 Thread 클래스 상세 설명
자주 사용 하 는 구조 함 수 는 다음 과 같다.
// :
// System.Threading.Thread , 。
//
// :
// start:
// System.Threading.ParameterizedThreadStart , 。
//
// :
// System.ArgumentNullException:
// start null。
[SecuritySafeCritical]
public Thread(ParameterizedThreadStart start);
//
// :
// System.Threading.Thread 。
//
// :
// start:
// System.Threading.ThreadStart , 。
//
// :
// System.ArgumentNullException:
// start null。
[SecuritySafeCritical]
public Thread(ThreadStart start);
1.매개 변수 없 이 스 레 드 만 들 기ThreadStart 의뢰 는 형식 비트 void 를 되 돌려 주 는 매개 변수 없 는 방법 을 정의 합 니 다.
public void Main()
{
Thread vThread = new Thread(ThreadFun);
//vThread.Name = "td_Name"; //
vThread.Start(); //
Console.WriteLine("This is the main thread:id=" + Thread.CurrentThread.ManagedThreadId);
}
void ThreadFun() // :ThreadStart
{
Console.WriteLine("Running in a new thread:id=" + Thread.CurrentThread.ManagedThreadId);
for (int i = 0; i < 10; i++)
{
Console.Write(".");
Thread.Sleep(500);
}
Console.WriteLine("THREAD END");
}
출력 결과:상소 코드 의 ThreadFun()을 Lambda 표현 식 으로 대체 하여 Thread 의 간편 한 사용 방식 으로 바 꿉 니 다.
public void Main()
{
Thread vThread = new Thread(() =>
{
Console.WriteLine("Running in a new thread");
});
//vThread.Name = "td_Name"; //
vThread.Start(); //
Console.WriteLine("This is the main thread");
}
2.스 레 드 에 매개 변 수 를 전달 합 니 다.두 가지 방식:하 나 는 Parameterized ThreadStart 의뢰 를 가 진 방법 으로 매개 변수 구조 Thread 를 사용 하 는 것 입 니 다.다른 하 나 는 사용자 정의 클래스 를 만 들 고 스 레 드 방법 을 인 스 턴 스 방법 으로 정의 하 는 것 입 니 다.먼저 인 스 턴 스 의 데 이 터 를 초기 화하 고 스 레 드 를 시작 합 니 다.
전달 매개 변수
public struct TdData //
{
public string Message; // string
}
첫 번 째 방법 사용:
public void Main()
{
TdData tData = new TdData() { Message = "Thread Info" };
Thread vThread = new Thread(ThreadFun);
vThread.Start(tData); // ,
Console.WriteLine("This is the main thread");
}
void ThreadFun(object pObj) // :ParameterizedThreadStart
{
TdData vData = (TdData)pObj;
Console.WriteLine("In a new thread, Received:{0}", vData.Message);
}
두 번 째 방식 사용:클래스 를 먼저 정의 합 니 다.
public class TdHelper
{
public TdData mData; //
//
public TdHelper(TdData pData)
{
this.mData = pData;
}
public void ThreadFun() // :ThreadStart
{
Console.WriteLine("In a new thread, TdDataMessage:{0}", mData.Message);
}
}
그리고 메 인 스 레 드(필요 한 곳)에 Thread 를 만 들 고 인 스 턴 스 방법 TdHelper.ThreadFun()을 구조 함수 의 매개 변수 로 합 니 다.
public void Main()
{
TdData tData = new TdData() { Message = "Thread Info" };
TdHelper tHelper = new TdHelper(tData); //
Thread vThread = new Thread(tHelper.ThreadFun);
vThread.Start();
Console.WriteLine("This is the main thread");
}
3.백 스테이지 스 레 드기본 적 인 상황 에서 Thread 류 가 만 든 스 레 드 는 프론트 스 레 드 이 고 스 레 드 탱크 의 스 레 드 는 항상 백 스테이지 스 레 드 입 니 다.하나의 프론트 스 레 드 가 실행 되 기만 하면 프로그램의 프로 세 스 가 실 행 됩 니 다.여러 개의 프론트 스 레 드 가 실행 되 고 Main()방법 이 끝나 면 프로그램 은 모든 프론트 스 레 드 가 작업 을 완성 할 때 까지 활성화 되 어 있 습 니 다.
Thread 클래스 인 스 턴 스 의 IsBackground 속성 을 설정 하여 배경 스 레 드 로 만 들 수 있 습 니 다.
public void Main()
{
Thread vThread = new Thread(() =>
{
Console.WriteLine("New thread started"); // Title3
Thread.Sleep(5000);
Console.WriteLine("New thread completed"); // Title2
});
//vThread.IsBackground = true;
vThread.Start();
Console.WriteLine("This is the main thread"); // Title1
}
IsBackground 속성 이 기본적으로 false 일 때 콘 솔 에서 3 개의 출력 정 보 를 완전 하 게 볼 수 있 습 니 다.그러나 트 루 로 설정 하면 세 번 째 정보(Title 2)가 출력 될 때 까지 기다 리 지 않 고 메 인 스 레 드 Main()이 실행 되면 콘 솔 창 이 자동 으로 닫 힙 니 다.4.스 레 드 우선 순위
Priority 속성 을 통 해 Thread 클래스 인 스 턴 스 의 우선 순 위 를 조정 할 수 있 습 니 다.기본 값 은:vThread.Priority=ThreadPriority.Normal;/매 거 값
관계:Highest>aboveNormal>Normal>BelowNormal>Lowest
5.제어 라인
Thread 대상 의 Start()방법 을 호출 하면 스 레 드 를 만 들 수 있 습 니 다.그러나 Start()방법 을 호출 한 후에 도 새 스 레 드 는 Running 상태 가 아니 라 Unstarted 상태 입 니 다.운영 체제 의 스 레 드 스케줄 러 만 이 스 레 드 를 실행 할 것 을 선택 하면 스 레 드 는 Running 상태 로 변 경 됩 니 다.Thread.ThreadState 속성 을 통 해 이 스 레 드 의 현재 상 태 를 얻 을 수 있 습 니 다.
Thread.sleep()방법 을 사용 하면 스 레 드 를 WaitSleepJoin 상태 로 만 들 고 Sleep()방법 이 정 의 된 시간 대 를 거 친 후에 스 레 드 는 다시 운영 체제 에 배 치 될 때 까지 기 다 립 니 다.
스 레 드 를 멈 추 려 면 Thread.Abort()방법 을 사용 할 수 있 습 니 다.이 방법 을 사용 하면 종료 명령 을 받 은 스 레 드 에 ThreadAbortException 을 던 져 서 처리 프로그램 으로 이 이상 을 포착 합 니 다.스 레 드 는 끝나 기 전에 청 소 를 완료 할 수 있 습 니 다.스 레 드 는 Thread.Abort()방법 을 호출 한 결 과 를 받 은 후에 도 계속 작업 할 수 있 습 니 다.스 레 드 가 초기 화 되 지 않 으 면 종료 요청 을 받 은 스 레 드 의 상 태 는 Abortrequired 에서 Aborted 로 변 경 됩 니 다.
스 레 드 가 끝 날 때 까지 기다 리 려 면 Thread.Join()방법 을 사용 할 수 있 습 니 다.현재 스 레 드 를 중단 하고 가입 한 스 레 드 가 완 료 될 때 까지 WaitSleepJoin 상태 로 설정 합 니 다.
참조:C\#다 중 스 레 드 제어 상세 설명
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지Evergreen .Net Framework SDK 4.8 VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.