평가 및 의견을 보내려면 클릭하십시오.
MSDN
MSDN Library
.NET 개발
이전 버전
.NET Framework SDK 2.0
Class Library Reference
System.Windows.Forms
Control 클래스
Control 속성
 InvokeRequired 속성

  저대역폭 보기 설정
이 페이지에서 다루는 특정 제품:.
Microsoft Visual Studio 2005/.NET Framework 2.0

다음 제품들은 다른 버전에서 다루어 집니다.
.NET Framework 클래스 라이브러리
Control.InvokeRequired 속성

호출자가 컨트롤이 만들어진 스레드와 다른 스레드에 있기 때문에 메서드를 통해 컨트롤을 호출하는 경우 해당 호출자가 호출 메서드를 호출해야 하는지 여부를 나타내는 값을 가져옵니다.

네임스페이스: System.Windows.Forms
어셈블리: System.Windows.Forms(system.windows.forms.dll)

Visual Basic(선언)
Public ReadOnly Property InvokeRequired As Boolean
Visual Basic(사용법)
Dim instance As Control
Dim value As Boolean

value = instance.InvokeRequired
C#
public bool InvokeRequired { get; }
C++
public:
virtual property bool InvokeRequired {
    bool get () sealed;
}
J#
/** @property */
public final boolean get_InvokeRequired ()
JScript
public final function get InvokeRequired () : boolean

속성 값

컨트롤의 Handle이 호출 스레드와 다른 스레드에서 만들어져 호출 메서드를 통해 해당 컨트롤을 호출해야 하는 경우 true이고, 그렇지 않으면 false입니다.

Windows Forms의 컨트롤은 특정 스레드에 바인딩되며 스레드로부터 안전하지 않습니다. 따라서 다른 스레드에서 컨트롤의 메서드를 호출할 경우 해당 컨트롤의 호출 메서드 중 하나를 사용하여 호출을 적절한 스레드에 마샬링해야 합니다. 이 속성을 사용하면 호출 메서드를 호출해야 하는지 여부를 확인할 수 있습니다. 이 방법은 컨트롤을 소유한 스레드들 알 수 없는 경우 유용합니다.

Note참고

컨트롤에는 InvokeRequired 속성과 함께 호출 스레드로부터 안전한 네 개의 메서드(Invoke, BeginInvoke, EndInvokeCreateGraphics)가 있습니다. 다른 스레드에서 메서드를 호출하는 경우 해당 호출 메서드 중 하나를 사용해야 합니다.

컨트롤의 핸들이 없으면 InvokeRequired는 창 핸들이 있는 컨트롤이나 폼을 찾을 때까지 해당 컨트롤의 부모 체인을 위로 검색합니다. 적절한 핸들을 찾을 수 없으면 InvokeRequired 메서드는 false를 반환합니다.

즉, 동일한 스레드에서 호출이 발생하여 Invoke가 필요하지 않거나 다른 스레드에서 컨트롤이 만들어졌지만 컨트롤의 핸들은 아직 만들어지지 않은 경우 InvokeRequiredfalse를 반환할 수 있습니다.

컨트롤의 핸들이 아직 만들어지지 않은 경우 컨트롤에 대한 속성, 메서드 또는 이벤트를 호출해서는 안 됩니다. 이렇게 하면 배경 스레드에서 컨트롤의 핸들이 만들어져 메시지 펌프 없이 스레드에서 컨트롤이 격리되고 응용 프로그램이 불안정해질 수 있습니다.

InvokeRequired가 배경 스레드에서 false를 반환하면 IsHandleCreated 값을 확인하여 이러한 상황을 방지할 수도 있습니다. 컨트롤 핸들이 아직 만들어지지 않은 경우 핸들이 만들어질 때까지 기다린 후 Invoke 또는 BeginInvoke를 호출해야 합니다. 일반적으로 이러한 경우는 폼이 표시되기 전이나 Application.Run이 호출되기 전의 Application.Run(new MainForm())에서와 같이 응용 프로그램의 기본 폼 생성자에서 배경 스레드가 만들어지는 경우에만 발생합니다.

한 가지 해결책은 배경 스레드를 시작하기 전에 폼의 핸들이 만들어질 때까지 기다리는 것입니다. Handle 속성을 호출하여 핸들을 강제로 만들거나 Load 이벤트가 배경 프로세스를 시작할 때까지 기다립니다.

이에 대한 보다 나은 해결책은 스레드 간 마샬링을 위한 컨트롤 대신 SynchronizationContext에서 반환하는 SynchronizationContext를 사용하는 것입니다.

Note참고

메시지를 처리해야 하는 스레드가 더 이상 활성 상태가 아니면 예외가 throw될 수 있습니다.

다중 스레드 Windows Forms 컨트롤에 대한 자세한 내용은 방법: 백그라운드 스레드를 사용하여 파일 검색을 참조하십시오.

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework에서 모든 플래폼의 모든 버전을 지원하지는 않습니다. 지원되는 버전의 목록은 시스템 요구 사항을 참조하십시오.

.NET Framework

2.0, 1.1, 1.0에서 지원

.NET Compact Framework

2.0에서 지원
커뮤니티 콘텐츠   커뮤니티 콘텐츠란?
새 콘텐츠 추가 RSS  주석
Processing
© 2009 Microsoft Corporation. All rights reserved. 사용약관  |  상표  |  개인정보보호
Page view tracker