Form thread에서 다른 thread를 생성하였을 경우,
다른 thread가 Form thread의 변수를 억세스 할 경우
"크로스 스레드 작업이 잘못되었습니다" 라는 에러를 냅니다.
이 경우 두가지 해결 방법이 있습니다.
1. 크로스 스레드 억세스를 무시하도록 설정
CheckForIllegalCrossThreadCalls = false;
라고 초기화 부분에 적으면 됩니다.
2. Invoke 플래그 사용법
아래와 같이 InvokeRequired 플래그를 써서 억세스 하면 됩니다.
Control ctrl 에는 변수 명을 쓰면 됩니다.
private void setText(Control ctrl,string txtValue)
{
if (ctrl.InvokeRequired)
{
Ctrl_Involk CI = new Ctrl_Involk(setText);
ctrl.Invoke(CI, ctrl, txtValue);
}
else
{
ctrl.Text = txtValue;
}
}
'Programming' 카테고리의 다른 글
[C#] 프로그레스바 건드리기 (0) | 2011.10.27 |
---|---|
[C#] 시리얼 포트 사용하기 (0) | 2011.10.27 |
[C#] 타이머 사용하기 (0) | 2011.10.27 |
[C#] 파일 선택 다이얼로그 박스 열기 (0) | 2011.10.25 |
[C#] OpenFileDialog.ShowDialog() 에서 멈춤 현상 (1) | 2011.10.25 |