2010-01-24 4 views
3

"포커스를"주 스레드로 되돌릴 때 다른 스레드에서 호출 할 때 "this"또는 원하는 컨트롤을 호출 할 수 있다는 것을 알았습니다 to, well invoke. 나는 컨트롤을 다시 제공 할 때 이것이 중요하지 않다는 것을 알았으므로 아무도 내가 메인 스레드에 대한 컨트롤을 호출하는 이유를 설명 할 수 있습니까? 중요하지 않거나 암시 적으로 호출되는 주 스레드입니까? button1을 내 기본 폼에있는 경우스레드 호출 .NET. this 대 .control

this.Invoke(InvokedMethod,args) 

button1.Invoke(InvokedMethod,args) 

다를 수.

답변

2

컨트롤에 대한 호출은 컨트롤의 핸들을 사용하여 컨트롤의 UI 스레드 인 스레드를 확인한 다음 해당 스레드를 사용하여 실행합니다. UI 스레드가 여러 개있을 수도 있습니다 (UI 스레드는 메시지 루프를 실행하는 임의의 스레드입니다). 또는 컨트롤이 UI가 아닌 스레드에 대한 핸들을 가질 수도 있습니다 (예 : 컨트롤을 잘못 프로 그램하게 만드는 경우). 일반적으로 기본 폼이나 컨트롤을 호출하는 데는 차이가 없지만 특정 상황에서는 중요 할 수 있습니다.

2

Invoke 방법은 Control 클래스로 정의됩니다.

따라서 모든 Control 인스턴스에서 액세스 할 수 있습니다.

양식을 작성할 때 클래스는 (간접적으로) Control을 상속하는 Form 클래스를 상속합니다. 따라서 this 인스턴스를 통해 액세스 할 수도 있습니다.

당신이 선택한 것은 중요하지 않습니다.

+0

내 컨트롤을 호출하면 내 기본 폼이 자동으로 호출됩니까? 기본 폼에서 하나의 컨트롤을 호출하면 같은 폼의 다른 컨트롤도 호출됩니까? –

+2

무엇을 의미합니까? Invoke를 호출하면 UI 스레드에서 메소드가 실행됩니다. 특정 컨트롤과는 아무런 관련이 없습니다. – SLaks

+0

나는 잡았다. 감사! –