스레드 매개변수(2.0), "반환 값" 및 스레드 정지 정보
1. 스레드 매개변수:
때로는 일부 정보를 보조 스레드에 전달해야 합니다. 여기서는 ParameterizedThreadStart 위임 예제를 사용해야 합니다
.
private void btRunThread_Click(object sender, EventArgs e)
{
Thread
t = new Thread(new ParameterizedThreadStart(this.ThreadRun));
(100)
}
private void ThreadRun(object o)
{
this.lbCompleted.Invoke((MethodInvoker)delegate { this.lbCompleted.Text = System.Convert.ToString(o); })
;
2. 유사한 기능은 대략적으로 프록시를 통해 달성할 수 있습니다. 예:
class Program
{
static void Main(string[] args)
{
ThreadClass tc = new ThreadClass(new
MyDlg(DlgMethod));
ThreadRun ));
Console.WriteLine("두 번째 스레드 시작")
;
Console.WriteLine
(
"두 번째 스레드 완료")
;
private static void DlgMethod(int i)
{
Console.WriteLine("두 번째 스레드 결과:{0}", i)
}
;
공개 대리인 void MyDlg(int i);
클래스 ThreadClass
{
개인 MyDlg myDlg;
공용 ThreadClass(MyDlg pDlg)
{
this.myDlg = pDlg
}
공개 무효 ThreadRun()
{
int 총 = 0;
for (int i = 0; i < 100; i++)
{
총 += i
}
if (myDlg != null)
{
myDlg(전체)
}
}
}
3. 스레드 일시 중단:
(1) .join 메서드
MSDN 참고 사항: 표준 COM 및 SendMessage 메시지 펌프 처리를 계속 실행하는 동안 호출 스레드는 스레드가 종료될 때까지 차단됩니다.
혼란스러워서 직접 시도해 보니 스레드가 조인 메서드를 호출한 후 스레드의 작업이 완료될 때까지 스레드가 CPU 시간을 모두 점유하는 것 같습니다. 이것이 사실인지 모르십니까?
(2) abort 메소드는
스레드를 즉시 종료합니다
. (3) 식별자 정의 예
:
class Program
{
private static
void Main(string[] args)
{
stop = false;
스레드 t = new Thread(new ThreadStart(ThreadRun));
t.Start();
Thread.Sleep(100)
;
콘솔.읽기()
}
static void ThreadRun()
{
while (!stop)
{
Console.WriteLine("일을 좀 하세요...")
}
}
}
http://www.cnblogs.com/KissKnife/archive/2006/10/03/520463.html