2011-08-23 9 views
0

나는 Control.BeginInvoke 방법을 찾고 있었어요 그리고 그것은 말할 때 나는 확실히 그것을 의미하지 않았다 :어려움

컨트롤의 내부 핸들이 작성된 스레드에서 비동기 대리자를 실행합니다 에.

무엇이 control's underlying handle입니까? 그것은 무엇을합니까?

+1

다음을 참조하십시오. http://stackoverflow.com/questions/229554/whats-the-difference-between-invoke-and-begininvoke – V4Vendetta

답변

6

컨트롤 "스레드 선호도를"이 - 일반적으로 (그들은 단지입니다 직접이 조작 (또는 InvokeRequired과 같은 몇 가지 특정 속성을 제외하고,을 검사)를 만든 스레드에 의해 수요가 의미 UI 스레드라고 함). 핸들은 OS 컨트롤과 .NET 컨트롤 사이의 추상화입니다.

실제로이 작업은 UI 스레드 (컨트롤 소유)가 가져온 메시지를 Windows 메시지 루프에 배치하여 UI 스레드에서 대리인을 호출하도록합니다. 이것은 컨트롤과 대화하는 것이 허용된다는 것을 의미합니다. 현재 백그라운드 스레드 (비동기 콜백 또는 BackgroundWorker 일 가능성이 있음)에 있고 UI를 업데이트해야하는 경우 유용합니다.

1

컨트롤을 관리하지 않는 내부 참조 인 Windows 핸들을 의미합니다.

Contorl.Handle를 참조하십시오

컨트롤이 바인딩되는 창 핸들을 가져옵니다.

그리고 : 핸들 속성의

값은 윈도우 HWND입니다.

+0

그렇습니다. 컨트롤이 생성 된 스레드에서 대리자를 비동기 적으로 실행합니다. " – Caner

+0

@LAS_VEGAS - 그건 내 이해입니다. – Oded

1

Windows Forms 컨트롤은 특정 스레드에서 만들어지며 다중 스레드 환경에서 사용하도록 설계되지 않았습니다. Microsoft는 컨트롤을 만든 스레드에서만 컨트롤을 조작 할 수 있도록하여 컨트롤에 단일 스레드 환경을 강제로 적용했습니다.

컨트롤의 BeginInvoke는 해당 스레드에서 제공된 코드를 호출합니다.

+0

감사합니다. +1 – Caner