동물원_근무중_코알라/C#

[C#] Thread 해제 및 크로스 Thread 발생

룰루랄라코알라 2023. 7. 28. 07:44
반응형

스레드 자원 해제 (해제하지 않으면 프로세스에 남아있는다.)
1.1 thread.IsBackground = true; //UI쓰레드가 종료될 때 자원을해제.
-->  해당 방법은 Program.cs 에 지정한 UI thread 가 close 되어야 종료가 된다.

1.2 FormClosing 이벤트를 사용해서 폼이 닫힐 때 쓰레드 해제를 사용 한다. 
        private void Form2_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (th != null)
            {
                th.Abort();
            }
            th = null;
      }


2.크로스 Thread 발생 (UI-Thread외의 Thread에서 컨트롤에 접근시 예외)
크로스 쓰레드 발생은 디버그 모드 진행시 발생 

처리방법은 Invoke 를 사용하여 동기/비동기로 처리방법을 바꿔준다,

//크로스 쓰레드에러 처리완료.
            //this.Invoke((MethodInvoker)delegate
            //{
            //    label1.Text = "aaa";
            //});

            this.Invoke(new Action(() =>
            {
                label1.Text = "aaa";
            }));

반응형