System.Threading.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"); }ALOUTPUT 결과 :
lambda expression
를 사용하여 호소 코드에 threadFun ()을 사용하여 간단한 방법을 사용하여 스레드를 사용합니다. 매개변수를 전달하는 두 가지 방법이 있습니다: 하나는 ParameterizedThreadStart
대리자와 함께 메서드 매개변수를 사용하여 Thread를 구성하는 것이고, 다른 하나는 사용자 정의 클래스를 만들고 스레드 메서드를 인스턴스 메서드로 정의하는 것입니다. 스레드를 시작하기 전에 인스턴스 데이터.
예: 매개변수 전달 3. 백그라운드 스레드
기본적으로 Thread 클래스에 의해 생성된 스레드는 포그라운드 스레드이고 스레드 풀에 있는 스레드는 항상 백그라운드 스레드입니다. 하나의 포그라운드 스레드가 실행 중인 동안에는 애플리케이션 프로세스가 실행 중입니다. 여러 포그라운드 스레드가 실행 중이고 Main() 메서드가 종료되면 모든 포그라운드 스레드가 해당 작업을 완료할 때까지 애플리케이션이 계속 활성 상태입니다. Thread 클래스 인스턴스의 IsBackground IsBackground 속성의 기본값이 인 경우 콘솔에서 3개의 출력 문장을 볼 수 있습니다. 전체 정보가 있지만 가 true 4. 스레드 우선순위 Thread 클래스 인스턴스의 우선순위를 조정할 수 있습니다. 기본값은 다음과 같습니다. vThread.Priority = ThreadPriority.Normal // 관계. : Highest > AboveNormal > Normal > BelowNormal > Lowest 스레드를 생성합니다. 그러나 Start() 메서드를 호출한 후에도 새 스레드는 여전히 Running 상태가 아니라 Unstarted 상태입니다. 운영 체제의 스레드 스케줄러가 스레드를 실행하도록 선택한 경우에만 스레드가 실행 중 상태로 변경됩니다. Thread.ThreadState 속성을 통해 스레드의 현재 상태를 가져올 수 있습니다. 참조: 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");
}
첫 번째 방법 사용: 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);
}
}
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");
}
설정하여 백그라운드 스레드로 만들 수 있습니다.
위 내용은 C#의 멀티스레딩을 위한 Thread 클래스에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!