C# 강좌 : 제 30강 - 쓰레드 (3)
쓰레드(Thread)
쓰레드를 사용할 때 델리게이트 (delegate)를 이용하여 폼
과 컨트롤
을 비롯하여 사용자 정의 함수
를 이용할 수 있습니다.
프로젝트 구성
도구상자에서 TextBox를 Form1에 생성하며, MultiLine에 체크합니다.
전체 코드
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading;
namespace Project
{
public partial class Form1 : Form
{
Thread ThreadA;
Thread ThreadB;
delegate void ThreadDelegate_1(string i);
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
ThreadA = new Thread(TEST_1);
ThreadB = new Thread(TEST_2);
ThreadA.Start();
ThreadB.Start();
}
public void TEST_1()
{
for(int i=0; i<100; i++)
{
this.Invoke(new ThreadDelegate_1(TEXT), i.ToString());
Thread.Sleep(50);
if (i == 50) ThreadA.Suspend();
}
}
public void TEST_2()
{
for(int i=0; i< 100; i++)
{
Thread.Sleep(50);
}
ThreadA.Resume();
}
public void TEXT(string i)
{
textBox1.Text = i;
}
}
}
델리게이트(delegate)
delegate void ThreadDelegate_1(string i);
델리게이트
를 선언합니다. 사용될 인수를 포함할 수 있습니다.
this.Invoke(new ThreadDelegate_1(TEXT), i.ToString());
Invoke
와 delegate
를 이용하며 델리게이트와 사용자 정의 함수에서 사용되는 인자의 변수를 동일하게 설정합니다.
this.Invoke(new 선언된델리게이트(사용자 정의 함수), 인수);
로 사용할 수 있습니다.
Sleep
Thread.Sleep(ms);
을 통하여 밀리세컨드(millisecond) [ms] 동안 쓰레드를 중지할 수 있습니다. (1000 ms = 1s)
- Tip :
쓰레드의 이름
이나사용자 정의 함수의 이름
을 Thread 선언했을 경우System.Threading.Thread.Sleep(ms);
로 사용하여Sleep
할 수 있습니다.
Suspend
쓰레드이름.Suspend()
를 통하여 특정 쓰레드를 일시 중단
시킬 수 있습니다.
Resume
쓰레드이름.Resume()
를 통하여 일시 중단
된 쓰레드를 다시 시작
할 수 있습니다.
실행 결과
공유하기


댓글 남기기