크로스 스레드, 방법: 스레드로부터 안전한 방식으로 Windows Forms 컨트롤 호출

Program/C# 2008. 1. 16. 09:46

스레드로부터 안전한 방식으로 Windows Forms 컨트롤을 호출하려면

  1. 컨트롤의 InvokeRequired 속성을 쿼리합니다.

  2. InvokeRequiredtrue를 반환하는 경우에는 컨트롤을 실제로 호출하는 대리자를 사용하여 Invoke를 호출합니다.

  3. InvokeRequiredfalse를 반환하는 경우에는 컨트롤을 직접 호출합니다.

다음 코드 예제에서는 SetText라는 유틸리티 메서드에서 이 논리를 구현합니다. SetTextDelegate 대리자 형식은 SetText 메서드를 캡슐화합니다. TextBox 컨트롤의 InvokeRequiredtrue를 반환하면 SetText 메서드는 SetTextDelegate 인스턴스를 만들고 폼의 Invoke 메서드를 호출합니다. 그러면 TextBox 컨트롤을 만든 스레드에서 SetText 메서드가 호출되고 이 스레드 컨텍스트에서 Text 속성이 직접 설정됩니다.


## 그렇다면 모든 컨트롤들에 대해서 이와 같은 작업을 각각 해줘야 하는 것인가???


http://msdn2.microsoft.com/ko-kr/library/ms171728(VS.80).aspx

'Program > C#' 카테고리의 다른 글

C# Dll Load  (1) 2008.01.17
C# 데이터 베이스 개념  (0) 2008.01.16
시리얼 통신 자료 받기 메세지 Serial Port DataReceived Event  (0) 2008.01.16
: