본문 바로가기
개발/C#

c# 윈폼 - Thread 에서 UI 접근하기

by 킹감자1 2022. 3. 30.

 

c# 윈폼에서 Thread 안에서 UI의 값을 수정하려고 하면 에러가 뜹니다.

 

System.InvalidOperationException: '크로스 스레드 작업이 잘못되었습니다. 'btn_SocketConnect' 컨트롤이 자신이 만들어진 스레드가 아닌 스레드에서 액세스되었습니다.'

 

해당에러를 없애려면 몇가지 작업만 해주면 됩니다.

 

btn_SocketConnect.Text = "Disconnect";

기존의 버튼의 텍스트 값을 바꾸는 코드입니다.

 



if (btn_SocketConnect.InvokeRequired)
{
	// 작업쓰레드인 경우
	btn_SocketConnect.BeginInvoke(new Action(() => btn_SocketConnect.Text = "Disconnect"));
}
else
{
    // UI 쓰레드인 경우
    btn_SocketConnect.Text = "Disconnect";
}

 

이렇게 바꿔주면 됩니다.

바꾸고자하는 UI 를 검사하고 작업 스레드인지 UI 스레드인지 검사한 후 처리하게 됩니다.

 

728x90
300x250
그리드형

댓글