Program/C#
크로스 스레드, 방법: 스레드로부터 안전한 방식으로 Windows Forms 컨트롤 호출
TJStory
2008. 1. 16. 09:46
스레드로부터 안전한 방식으로 Windows Forms 컨트롤을 호출하려면
-
컨트롤의 InvokeRequired 속성을 쿼리합니다.
-
InvokeRequired가 true를 반환하는 경우에는 컨트롤을 실제로 호출하는 대리자를 사용하여 Invoke를 호출합니다.
-
InvokeRequired가 false를 반환하는 경우에는 컨트롤을 직접 호출합니다.
다음 코드 예제에서는 SetText라는 유틸리티 메서드에서 이 논리를 구현합니다. SetTextDelegate 대리자 형식은 SetText 메서드를 캡슐화합니다. TextBox 컨트롤의 InvokeRequired가 true를 반환하면 SetText 메서드는 SetTextDelegate 인스턴스를 만들고 폼의 Invoke 메서드를 호출합니다. 그러면 TextBox 컨트롤을 만든 스레드에서 SetText 메서드가 호출되고 이 스레드 컨텍스트에서 Text 속성이 직접 설정됩니다.
## 그렇다면 모든 컨트롤들에 대해서 이와 같은 작업을 각각 해줘야 하는 것인가???
http://msdn2.microsoft.com/ko-kr/library/ms171728(VS.80).aspx