Control.BeginInvoke Control.BeginInvoke Control.BeginInvoke Control.BeginInvoke Method

정의

컨트롤의 내부 핸들이 작성된 스레드에서 대리자를 비동기식으로 실행합니다.Executes a delegate asynchronously on the thread that the control's underlying handle was created on.

오버로드

BeginInvoke(Delegate) BeginInvoke(Delegate) BeginInvoke(Delegate) BeginInvoke(Delegate)

컨트롤의 내부 핸들이 작성된 스레드에서 지정된 대리자를 비동기식으로 실행합니다.Executes the specified delegate asynchronously on the thread that the control's underlying handle was created on.

BeginInvoke(Delegate, Object[]) BeginInvoke(Delegate, Object[]) BeginInvoke(Delegate, Object[]) BeginInvoke(Delegate, Object[])

컨트롤의 내부 핸들이 작성된 스레드에서 특정 인수를 사용하여 지정된 대리자를 비동기식으로 실행합니다.Executes the specified delegate asynchronously with the specified arguments, on the thread that the control's underlying handle was created on.

BeginInvoke(Delegate) BeginInvoke(Delegate) BeginInvoke(Delegate) BeginInvoke(Delegate)

컨트롤의 내부 핸들이 작성된 스레드에서 지정된 대리자를 비동기식으로 실행합니다.Executes the specified delegate asynchronously on the thread that the control's underlying handle was created on.

public:
 IAsyncResult ^ BeginInvoke(Delegate ^ method);
public IAsyncResult BeginInvoke (Delegate method);
member this.BeginInvoke : Delegate -> IAsyncResult
Public Function BeginInvoke (method As Delegate) As IAsyncResult

매개 변수

method
Delegate Delegate Delegate Delegate

매개 변수를 사용하지 않는 메서드의 대리자입니다.A delegate to a method that takes no parameters.

반환

IAsyncResult 작업의 결과를 나타내는 BeginInvoke(Delegate)입니다.An IAsyncResult that represents the result of the BeginInvoke(Delegate) operation.

예외

해당 창 핸들을 찾을 수 있습니다.No appropriate window handle can be found.

예제

다음 코드 예제를 사용 하는 방법을 보여 줍니다는 BeginInvoke 메서드.The following code example demonstrates a use of the BeginInvoke method.

private:
   void Invoke_Click( Object^ /*sender*/, EventArgs^ /*e*/ )
   {
      myTextBox->BeginInvoke( gcnew InvokeDelegate( this, &MyForm::InvokeMethod ) );
   }

   void InvokeMethod()
   {
      myTextBox->Text = "Executed the given delegate";
   }
public delegate void InvokeDelegate();

private void Invoke_Click(object sender, EventArgs e)
{
   myTextBox.BeginInvoke(new InvokeDelegate(InvokeMethod));
}
public void InvokeMethod()
{
   myTextBox.Text = "Executed the given delegate";
}
Delegate Sub InvokeDelegate()

Private Sub Invoke_Click(sender As Object, e As EventArgs)
   myTextBox.BeginInvoke(New InvokeDelegate(AddressOf InvokeMethod))
End Sub 'Invoke_Click

Public Sub InvokeMethod()
   myTextBox.Text = "Executed the given delegate"
End Sub 'InvokeMethod

설명

대리자가 비동기적으로 호출 하 고이 메서드가 즉시 반환 됩니다.The delegate is called asynchronously, and this method returns immediately. 컨트롤의 핸들을 소유 하는 스레드가 모든 스레드에서이 메서드를 호출할 수 있습니다.You can call this method from any thread, even the thread that owns the control's handle. 컨트롤의 핸들이 없는 아직 경우이 메서드는 컨트롤이 나 창 핸들이 있는 양식을 찾을 때까지 컨트롤의 부모 체인 검색 합니다.If the control's handle does not exist yet, this method searches up the control's parent chain until it finds a control or form that does have a window handle. 적절 한 핸들 있으면 BeginInvoke 예외가 throw 됩니다.If no appropriate handle can be found, BeginInvoke will throw an exception. 대리자 메서드 내에서 예외 포착 되지 않는 것으로 간주 되어 응용 프로그램의 포착 되지 않은 예외 처리기로 전송 됩니다.Exceptions within the delegate method are considered untrapped and will be sent to the application's untrapped exception handler.

호출할 수 있습니다 EndInvoke 경우도 있지만이 필요 하지 않은 경우 대리자의 반환 값을 검색 하려면.You can call EndInvoke to retrieve the return value from the delegate, if neccesary, but this is not required. EndInvoke 반환 값을 검색할 수 있습니다 때까지 차단 됩니다.EndInvoke will block until the return value can be retrieved.

참고

대부분의 메서드는 컨트롤에만 호출할 수 있습니다 스레드에서 컨트롤 생성 된 위치.Most methods on a control can only be called from the thread where the control was created. 외에 InvokeRequired 속성인 네 가지 메서드로 컨트롤에는 스레드로부터 안전 하: Invoke, BeginInvoke, EndInvoke, 및 CreateGraphics 컨트롤에 대 한 핸들을 이미 만든 경우.In addition to the InvokeRequired property, there are four methods on a control that are thread safe: Invoke, BeginInvoke, EndInvoke, and CreateGraphics if the handle for the control has already been created. 호출 CreateGraphics 백그라운드 스레드에서 컨트롤의 핸들이 생성 되기 전에 잘못 된 크로스 스레드 호출 될 수 있습니다.Calling CreateGraphics before the control's handle has been created on a background thread can cause illegal cross thread calls. 다른 모든 메서드 호출에 대 한 하나를 사용 해야 invoke 메서드의 호출 컨트롤의 스레드로 마샬링합니다.For all other method calls, you should use one of the invoke methods to marshal the call to the control's thread. Invoke 메서드는 항상 해당 콜백을 컨트롤의 스레드를 호출합니다.The invoke methods always invoke their callbacks on the control's thread.

참고

메시지를 처리 해야 하는 스레드가 더 이상 활성 상태가 되는 경우 예외가 throw 될 수 없습니다.An exception might be thrown if the thread that should process the message is no longer active.

보안

SecurityPermission
비관리 코드를 호출할 즉각적인 호출자가입니다.for the immediate caller to call unmanaged code. 연결 된 열거형: UnmanagedCodeAssociated enumeration: UnmanagedCode

추가 정보

BeginInvoke(Delegate, Object[]) BeginInvoke(Delegate, Object[]) BeginInvoke(Delegate, Object[]) BeginInvoke(Delegate, Object[])

컨트롤의 내부 핸들이 작성된 스레드에서 특정 인수를 사용하여 지정된 대리자를 비동기식으로 실행합니다.Executes the specified delegate asynchronously with the specified arguments, on the thread that the control's underlying handle was created on.

public:
 virtual IAsyncResult ^ BeginInvoke(Delegate ^ method, ... cli::array <System::Object ^> ^ args);
public IAsyncResult BeginInvoke (Delegate method, params object[] args);
abstract member BeginInvoke : Delegate * obj[] -> IAsyncResult
override this.BeginInvoke : Delegate * obj[] -> IAsyncResult
Public Function BeginInvoke (method As Delegate, ParamArray args As Object()) As IAsyncResult

매개 변수

method
Delegate Delegate Delegate Delegate

args 매개 변수에 있는 매개 변수의 수 및 형식과 동일한 매개 변수를 갖는 메서드의 대리자입니다.A delegate to a method that takes parameters of the same number and type that are contained in the args parameter.

args
Object[]

주어진 메서드에 인수로 전달하는 개체의 배열입니다.An array of objects to pass as arguments to the given method. 인수가 필요하지 않으면 null일 수 있습니다.This can be null if no arguments are needed.

반환

IAsyncResult 작업의 결과를 나타내는 BeginInvoke(Delegate)입니다.An IAsyncResult that represents the result of the BeginInvoke(Delegate) operation.

구현

예외

해당 창 핸들을 찾을 수 있습니다.No appropriate window handle can be found.

예제

다음 코드 예제를 사용 하는 방법을 보여 줍니다는 BeginInvoke 메서드.The following code example demonstrates a use of the BeginInvoke method.

private:
   delegate void MyDelegate(
   Label^ myControl, String^ myArg2 );
   void Button_Click( Object^ /*sender*/, EventArgs^ /*e*/ )
   {
      array<Object^>^myArray = gcnew array<Object^>(2);
      myArray[ 0 ] = gcnew Label;
      myArray[ 1 ] = "Enter a Value";
      myTextBox->BeginInvoke( gcnew MyDelegate( this, &MyForm::DelegateMethod ), myArray );
   }

   void DelegateMethod( Label^ myControl, String^ myCaption )
   {
      myControl->Location = Point(16,16);
      myControl->Size = System::Drawing::Size( 80, 25 );
      myControl->Text = myCaption;
      this->Controls->Add( myControl );
   }

   delegate void InvokeDelegate();
public delegate void MyDelegate(Label myControl, string myArg2);

private void Button_Click(object sender, EventArgs e)
{
   object[] myArray = new object[2];

   myArray[0] = new Label();
   myArray[1] = "Enter a Value";
   myTextBox.BeginInvoke(new MyDelegate(DelegateMethod), myArray);
}

public void DelegateMethod(Label myControl, string myCaption)
{
   myControl.Location = new Point(16,16);
   myControl.Size = new Size(80, 25);
   myControl.Text = myCaption;
   this.Controls.Add(myControl);
}
Delegate Sub MyDelegate(myControl As Label, myArg2 As String)

Private Sub Button_Click(sender As Object, e As EventArgs)
   Dim myArray(1) As Object
   
   myArray(0) = New Label()
   myArray(1) = "Enter a Value"
   myTextBox.BeginInvoke(New MyDelegate(AddressOf DelegateMethod), myArray)
End Sub 'Button_Click

Public Sub DelegateMethod(myControl As Label, myCaption As String)
   myControl.Location = New Point(16, 16)
   myControl.Size = New Size(80, 25)
   myControl.Text = myCaption
   Me.Controls.Add(myControl)
End Sub 'DelegateMethod

설명

대리자가 비동기적으로 호출 하 고이 메서드가 즉시 반환 됩니다.The delegate is called asynchronously, and this method returns immediately. 컨트롤의 핸들을 소유 하는 스레드가 모든 스레드에서이 메서드를 호출할 수 있습니다.You can call this method from any thread, even the thread that owns the control's handle. 컨트롤의 핸들이 없는 아직 경우이 메서드는 컨트롤이 나 창 핸들이 있는 양식을 찾을 때까지 컨트롤의 부모 체인 검색 합니다.If the control's handle does not exist yet, this method searches up the control's parent chain until it finds a control or form that does have a window handle. 적절 한 핸들 있으면 BeginInvoke 예외가 throw 됩니다.If no appropriate handle can be found, BeginInvoke will throw an exception. 대리자 메서드 내에서 예외 포착 되지 않는 것으로 간주 되어 응용 프로그램의 포착 되지 않은 예외 처리기로 전송 됩니다.Exceptions within the delegate method are considered untrapped and will be sent to the application's untrapped exception handler.

호출할 수 있습니다 EndInvoke 경우도 있지만이 필요 하지 않은 경우 대리자의 반환 값을 검색 하려면.You can call EndInvoke to retrieve the return value from the delegate, if neccesary, but this is not required. EndInvoke 반환 값을 검색할 수 있습니다 때까지 차단 됩니다.EndInvoke will block until the return value can be retrieved.

참고

대부분의 메서드는 컨트롤에만 호출할 수 있습니다 스레드에서 컨트롤 생성 된 위치.Most methods on a control can only be called from the thread where the control was created. 외에 InvokeRequired 속성인 네 가지 메서드로 컨트롤에는 스레드로부터 안전 하: Invoke, BeginInvoke, EndInvoke, 및 CreateGraphics 컨트롤에 대 한 핸들을 이미 만든 경우.In addition to the InvokeRequired property, there are four methods on a control that are thread safe: Invoke, BeginInvoke, EndInvoke, and CreateGraphics if the handle for the control has already been created. 호출 CreateGraphics 백그라운드 스레드에서 컨트롤의 핸들이 생성 되기 전에 잘못 된 크로스 스레드 호출 될 수 있습니다.Calling CreateGraphics before the control's handle has been created on a background thread can cause illegal cross thread calls. 다른 모든 메서드 호출에 대 한 하나를 사용 해야 invoke 메서드의 호출 컨트롤의 스레드로 마샬링합니다.For all other method calls, you should use one of the invoke methods to marshal the call to the control's thread. Invoke 메서드는 항상 해당 콜백을 컨트롤의 스레드를 호출합니다.The invoke methods always invoke their callbacks on the control's thread.

참고

메시지를 처리 해야 하는 스레드가 더 이상 활성 상태가 되는 경우 예외가 throw 될 수 없습니다.An exception might be thrown if the thread that should process the message is no longer active.

추가 정보

적용 대상