크로스 스레드 문제 해결....CheckForIllegalCrossThreadCalls!!
C# 으로 프로그램을 작성하다 보면
어쩔수 없이 한번은 크로스 쓰레드(Cross Thread ) 문제에 직면하게 됩니다.
이건 뭐 구조적으로 어쩔 수 없는 문제죠~
이때 MSDN 에서 권하는 방법은 Invoke 나 BackgroundWorker 로 호출하여 해결하는
두가지 방법을 제시합니다..
Invoke 는 Delegate 를 따로 선언하고 호출해줘야 해서 귀찮고,
BackgroundWorker는 다중 쓰레드에나 사용하는거 같은데 은근 부담스럽죠~
뭐 BackgroundWorker 가 사용법은 간결한거 같아도 전 그냥 Invoke 와
델리게이트로 해결하는 편입니다.
Invoke 와 델리게이트 간단하게 사용법은 이전 포스트
(http://goodhelper.egloos.com/2226125)를 참조하시구요~
그런데 아무리 Invoke 와 델리게이트를 이용해도 크로스스레드를 잡을 수 없는 경우가
있고, 또 굳이 Invoke 와 델리게이트까지 사용하지 않아도 되는 창의 강제종료의 경우에까지
Invoke 와 델리게이트를 엮어서 프로그램을 짜주기는 구찮더란 말입니다. 시간도 없고,,,,
그럴때 요긴하게 사용되는게 CheckForIllegalCrossThreadCalls 입니다.
이건 디버깅중 잘못된 스레드에 관한 Catch를 호출 할 건지 말건지를 설정하는 기능입니다.
그냥 크로스스레드 가 호출되는 윗단에 간단히
CheckForIllegalCrossThreadCalls = false;
를 선언하면 만사 OK 로 해결이 되기는 하는데 이건 어디까지나 임시방편입니다.
결국에는 Invoke 를 사용하던가, BackgroundWorker 를 이용해서 해결 해야 합니다.
시간은 없는데 원인을 도저히 모르겠는 경우에 문제가 발생하였을시 임시로 사용하고
나중에 반드시 관련 문제를 수정을 하는게 좋겠지요~~~^^;
자세한 설명은 아래를 참조하세요~
http://msdn.microsoft.com/ko-kr/library/system.windows.forms.control.checkforillegalcrossthreadcalls.aspx