c# .Net

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

by kay posted Aug 30, 2013
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄


MSDN 에서는..
- .NET Framework에서는 사용자가 스레드로부터 안전하지 않은 방식으로 컨트롤에 액세스할 경우 이를 감지할 수 있습니다.

디버거에서 응용 프로그램을 실행할 때 컨트롤을 만든 스레드가 아닌 스레드에서 해당 컨트롤을 호출하려고 하면 

"컨트롤 이름 컨트롤이 자신이 만들어진 스레드가 아닌 스레드에서 액세스되었습니다."라는 

메시지와 함께 InvalidOperationException이 발생합니다.


멀티 스레드 사용시 스레드 자신이 생성하지 않은 컨트롤에 접근시 보안상의 이유로 안전하지 않다고 판단되어 나오는 에러 메시지.


해결하기 위해서는 


1. 안전한 방식의 컨트롤 액세스(아래 msdn Url )

2. Invoke 메서드를 사용

3. 해당 보안 기능을 비활성화 시키는 방법


내부 사용용도의 간단 툴이었기에 비활성화 시키는 방법만 남겨둡니다..


CheckForIllegalCrossThreadCalls = false;



Invoke 사용 및 상세 내용은 MSDN(http://msdn.microsoft.com/ko-kr/library/ms171728.aspx) 참고.