크로스 스레드
처음 C# 을 배우다 보면 C, BASIC 에서는 존재하지 않던 낯선 에러를 많이 만나게 됩니다.
그 중에서 “크로스 쓰레드”에러는 C# 입문자를 많이 힘들게 합니다.
크로스 쓰레드 에러는 런타임 중에 또는 디버깅 중에 불규칙적으로 나타나며낮은 사양의 컴퓨터에서 더 많이 나타나게 됩니다.
원인
컨트롤이 자신이 만들어진 스레드가 아닌 스레드에서 액세스되었을 경우에 나타납니다.
다시 말해 컨트롤을 스레드(이벤트 포함)로 사용하고 있는데, 다른 스레드에서 접근할 경우 나타납니다.
하나의 컨트롤을 동시에 접근할 경우 데이터의 접근 순서에 따라 전혀 다른 결과가 나올수 있기 때문에
에러를 발생한 것입니다.
쓰레드에서 lock 이 필요한 이유를 아신다면 이 부분은 쉽게 이해되실 겁니다.
해결방법
다른 쓰레드에서 데이터를 동시에 write하는 경우라면 invoke 등으로 좀더 디테일하게 해결할 수 있습니다.
https://msdn.microsoft.com/ko-kr/library/ms171728(v=vs.100).aspx 참조
하지만 하나의 쓰레드에서는 쓰기만하고 하나의 쓰레드에서는 읽기만 해서 저런 에러는 무시해도 된다면 아래 한줄만 추가해 주면 됩니다.
private void Form1_Load(object sender, EventArgs e) { CheckForIllegalCrossThreadCalls = false; }