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
그리드형
'개발 > C#' 카테고리의 다른 글
wpf - ConvertFromString 버튼 클릭 시 색 변경하기 (0) | 2022.04.14 |
---|---|
wpf - 전환되는 페이지 만들기 (0) | 2022.04.14 |
Wpf - 윈도우 최상위 위치 시키기 (0) | 2022.03.15 |
Wpf - '일관성 없는 액세스 가능성' : 매개변수 형식이 메서드보다 액세스하기 어렵습니다. (0) | 2022.03.14 |
Wpf - InvalidOperationException 에러 (0) | 2022.03.03 |
댓글