티스토리 뷰

1.멀티쓰레드 => 작업을 병렬로 실행 가능.

프로그램을 실행 시, UI Thread 실행됨. 

UI thread 는 싱글 쓰레드임. 여러 개의 기능들이 각 작업이 끝나면 순차적으로 다음 작업이 이뤄짐.

using System.Threading;

public partial class Form1 : Form
{
	Thread thread = null;
    
    private void Form1_Load(object sender, EventArgs e)
    {
    	thread = new Thread(new ThreadStart(WorkThread));
        thread.IsBackground = true; // UIThread가 종료될 때 내가 만든 쓰레드도 종료시킴.
        thread.Priority = ThreadPriority.Normal; // OS(운영체제) 자원을 얼마나 자주 사용할 건지
        	//AboveNormal, BelowNormal, Hightest, Lowest, Normal
        thread.Start();
        
        //WorkThread 먼저 실행된다. 쓰레드 두개가 별개로 동작
        //쓰레드 테스트1 -> 쓰레드 테스트2 표시
        Thread.Sleep(4000); //4초 동안 쓰레드가 일시중지
        MessageBox.Show("쓰레드 테스트2");
    }
    
    // thread가 사용할 함수
    private void WorkThread()
    {
    	//thread.Start로 실행되는 부분
        Thread.Sleep(5000); //5초 동안 쓰레드가 일시중지
        MessageBox.Show("쓰레드 테스트1"); 
    }
}

 

using System.Threading;

public partial class Form1 : Form
{
	Thread thread = null;
    	Thread thread2 = null;
    
    private void Form1_Load(object sender, EventArgs e) //폼이 로드되고 나서 thread 동작
    {
    	thread = new Thread(new ThreadStart(WorkThread));
        thread.IsBackground = true; 
        thread.Priority = ThreadPriority.Normal;
       	thread.Start();
        
        thread2 = new Thread(new ThreadStart(WorkThread2));
        thread2.IsBackground = true; 
        thread2.Priority = ThreadPriority.Normal;
       	thread2.Start();
        
        Form2 form2 = new Form();
        form2.show(); //form2에서 작업을 개별적으로 실행하려면, form2안에서 thread 작업해야함.
        
        Thread.Sleep(5000); //UIThread가 멈추면 form2도 제어가 안됨. 개별쓰레드로 동작하지 않음.
    }
    
    private void WorkThread()
    {
    	try
        {
    		//thread.Start로 실행되는 부분
        	Thread.Sleep(2000); 
        	MessageBox.Show("쓰레드 테스트3"); 
        }
        catch (Exception ex)
        {
        	//오류 내용 기록
        }
    }
    
    private void WorkThread2()
    {
    	//thread2.Start로 실행되는 부분
        Thread.Sleep(5000);
        MessageBox.Show("쓰레드 테스트4"); 
    }
    
    //화면 표시 순서 : 폼 -> 2초 후 "쓰레드 테스트3" -> 3초 후 "쓰레드 테스트4"
    
    //쓰레드 쓰는 이유
    //서로의 작업에 영향이 가지 않도록 병렬작업
    //오래 걸리는 작업(네트워크 전송, 수신, DB작업)을 다른 작업에 동시에 진행 가능
    //로딩창, 로딩바를 호출해서 화면에 상태 표시 가능
}

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

WebApiConfig  (0) 2024.02.06
C# 윈폼_응용프로그램 개발 14  (0) 2024.01.28
C# 윈폼_응용프로그램 개발 13  (0) 2024.01.28
C# 윈폼_응용프로그램 개발 12  (0) 2024.01.28
C# 윈폼_응용프로그램 개발 11  (0) 2024.01.27
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/11   »
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
글 보관함