Control.BeginInvoke Method

Definition

컨트롤의 기본 핸들이 만들어진 스레드에서 대리자를 비동기적으로 실행합니다.Executes a delegate asynchronously on the thread that the control's underlying handle was created on.

Overloads

BeginInvoke(Delegate)

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

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)

컨트롤의 내부 핸들이 작성된 스레드에서 지정된 대리자를 비동기식으로 실행합니다.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

Parameters

method
Delegate

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

Returns

IAsyncResult

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

Exceptions

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

Examples

다음 코드 예제를 사용 하는 방법을 보여 줍니다는 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

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

Remarks

대리자가 비동기적으로 호출 하 고이 메서드가 즉시 반환 됩니다.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.

Note

대부분의 메서드는 컨트롤에만 호출할 수 있습니다 스레드에서 컨트롤 생성 된 위치.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.

Note

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

See also

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:
 virtual IAsyncResult ^ BeginInvoke(Delegate ^ method, cli::array <System::Object ^> ^ args);
public IAsyncResult BeginInvoke (Delegate method, params object[] args);
public IAsyncResult BeginInvoke (Delegate method, 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
Public Function BeginInvoke (method As Delegate, args As Object()) As IAsyncResult

Parameters

method
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.

Returns

IAsyncResult

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

Implements

Exceptions

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

Examples

다음 코드 예제를 사용 하는 방법을 보여 줍니다는 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

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

Remarks

대리자가 비동기적으로 호출 하 고이 메서드가 즉시 반환 됩니다.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.

Note

대부분의 메서드는 컨트롤에만 호출할 수 있습니다 스레드에서 컨트롤 생성 된 위치.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.

Note

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

See also

Applies to