상위 목록: 하위 목록: 작성 날짜: 읽는 데 7 분 소요

쓰레드(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());

Invokedelegate를 이용하며 델리게이트사용자 정의 함수에서 사용되는 인자의 변수를 동일하게 설정합니다.

this.Invoke(new 선언된델리게이트(사용자 정의 함수), 인수);로 사용할 수 있습니다.


Sleep

Thread.Sleep(ms);을 통하여 밀리세컨드(millisecond) [ms] 동안 쓰레드를 중지할 수 있습니다. (1000 ms = 1s)

  • Tip : 쓰레드의 이름이나 사용자 정의 함수의 이름Thread 선언했을 경우 System.Threading.Thread.Sleep(ms);로 사용하여 Sleep할 수 있습니다.


Suspend

쓰레드이름.Suspend()를 통하여 특정 쓰레드를 일시 중단 시킬 수 있습니다.


Resume

쓰레드이름.Resume()를 통하여 일시 중단된 쓰레드를 다시 시작할 수 있습니다.


실행 결과

댓글 남기기