|
|
게시됨 2016. 11. 14. 오전 10:25:44
|
|
|

스레드스타트:
ThreadStart 대리자는 void ThreadStart()로 정의되어 있어, 실행되는 메서드는 매개변수를 가질 수 없습니다. ThreadStart threadStart=new ThreadStart(계산); 스레드 thread=new Thread(threadStart); 실. Start(); 공공 공허 계산() { 이중 직경=0.5; 콘솔.쓰기("지름이 {0}인 원의 면적은 {1}"지름, 지름*수학.PI); } 여기서는 ThreadStart 타입을 정의하는 delegate를 사용하며, 이 메서드는 스레드가 실행해야 할 메서드를 정의합니다: Calculate, 즉 직경 0.5의 원의 둘레를 계산하고 출력하는 방법입니다. 이는 멀티스레딩의 가장 단순한 예이며, 많은 경우 이 정도면 충분합니다
ParameterThreadStart: ParameterThreadStart는 void ParameterizedThreadStart(객체 상태)로 정의되며, 이 대리자를 사용해 정의된 스레드의 시작 함수는 예를 들어 다음과 같은 입력 매개변수를 받아들일 수 있습니다:
ParameterizedThreadStart threadStart=new ParameterizedThreadStart(Calculate) 스레드 스레드=새 스레드() ; 실. 시작(0.9); public void Calculate(object arg)
{ 더블 지름=더블(arg); 콘솔.쓰기("지름이 {0}인 원의 면적은 {1}"지름, 지름*수학.PI);
}
Calculate 메서드는 객체 타입 객체의 매개변수를 가지고 있지만, 매개변수가 하나뿐이고 객체 타입이기도 합니다. 사용할 때도 변환이 필요합니다. 다행히도 매개변수가 존재할 수 있고, 여러 매개변수를 하나의 클래스로 결합한 후 이 클래스의 인스턴스를 매개변수로 전달하면 다중 매개변수 전송이 가능합니다. 예를 들면:
클래스 AddParams
{ 공공 지능 A, B;
public AddParams(int numb1, int numb2) { a = numb1; b = numb2; }
} #endregion
수업 프로그램
{ static void Main(string[] args) { Console.WriteLine("스레드 객체로 ***** 추가 *****"); Console.WriteLine("메인 스레드 ID {0}", Thread.CurrentThread.ManagedThreadId);
AddParams ap = 새로운 AddParams(10, 10); 스레드 t = 새로운 스레드(new ParameterizedThreadStart(Add)); t. 시작(ap); 콘솔.리드라인(); }
#region 덧셈 방법 static void Add(객체 데이터) { 만약 (데이터가 AddParams이다) { Console.WriteLine("메인 스레드 ID {0}", Thread.CurrentThread.ManagedThreadId);
AddParams ap = (AddParams)data; Console.WriteLine("{0} + {1}은 {2}", AP.A, AP.B, AP.A + AP.B); } } #endregion
}
} |
이전의:.net/c# 사용자 아바타 크롤, QQ 아바타 가져오기다음:.net/c#은 운전자의 차량 연식을 계산합니다
|