티스토리 뷰

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.Remoting.Channels;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        Thread thread1 = null;
        Thread thread2 = null;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            thread1 = new Thread(new ThreadStart(WorkThread));
            thread1.IsBackground = true; // UIThread가 종료될 때 우리가 만든 thread도 종료. << 새로운 백그라운드 쓰레드에서 실행
            thread1.Priority = ThreadPriority.Normal; // OS(운영체제) 자원을 얼마나 자주 사용할지 우선순위.
            thread1.Start();

            thread2 = new Thread(new ThreadStart(WorkThread2));
            thread2.IsBackground = true; // UIThread가 종료될 때 우리가 만든 thread도 종료. << 새로운 백그라운드 쓰레드에서 실행
            thread2.Priority = ThreadPriority.Normal; // OS(운영체제) 자원을 얼마나 자주 사용할지 우선순위.
            thread2.Start();

            Thread.Sleep(5000); //메인쓰레드가 5초 동안 일시 중단 >> 폼 로드 되지 못함.
            MessageBox.Show("bbbb"); //실행 후 5초 후에 별개로 동작

            Form2 form2 = new Form2();
            form2.Show(); // form2 개별 쓰레드로 동작하려고 하면, form2_load에서 따로 쓰레드 추가해야함.

            Thread.Sleep(5000); //UIThread가 멈추면 Form2도 제어할 수 없음.
        }

        /// <summary>
        /// Thread가 사용할 함수
        /// Form1이 로드되고 나서 안에 있는 동작이 실행됨.(메인쓰레드가 일시 중지 되면, 폼 로드 전에 별개로 동작함)
        /// </summary>
        private void WorkThread2()
        {
            try
            {
                Thread.Sleep(1000); //1초 동안 일시 중단
                MessageBox.Show("cccc"); //실행 후 1초 후에 별개로 동작

                //병렬작업
                //오래 걸리는 작업
                //네트워크전송, 수신, DB작업...
            }
            catch (Exception ex)
            {
                //오류내용...
            }
        }

        private void WorkThread()
        {
            try
            {
                //로딩창, 로딩바 표시...

                Thread.Sleep(2000); //2초 동안 일시 중단
                MessageBox.Show("aaaa"); //실행 후 2초 후에 별개로 동작
            }
            catch (Exception ex)
            {
                //오류내용...
            }
        }
    }
}

 

'2023~ > c#(.net framework)' 카테고리의 다른 글

C# .NET 주니어 2.쓰레드 동기화  (0) 2025.02.10
C# .NET 주니어 1.멀티쓰레드  (0) 2024.05.21
WebApiConfig  (0) 2024.02.06
C# 윈폼_응용프로그램 개발 14  (0) 2024.01.28
C# 윈폼_응용프로그램 개발 13  (0) 2024.01.28
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함