Control.BeginInvoke Methode

Definition

Führt einen Delegaten asynchron für den Thread aus, in dem das dem Steuerelement zugrunde liegende Handle erstellt wurde.

Überlädt

BeginInvoke(Delegate, Object[])

Führt den angegebenen Delegaten asynchron mit den angegebenen Argumenten für den Thread aus, in dem das diesem Steuerelement zugrunde liegende Handle erstellt wurde.

BeginInvoke(Action)

Führt den angegebenen Delegaten asynchron für den Thread aus, in dem das dem Steuerelement zugrunde liegende Handle erstellt wurde.

BeginInvoke(Delegate)

Führt den angegebenen Delegaten asynchron für den Thread aus, in dem das dem Steuerelement zugrunde liegende Handle erstellt wurde.

BeginInvoke(Delegate, Object[])

Führt den angegebenen Delegaten asynchron mit den angegebenen Argumenten für den Thread aus, in dem das diesem Steuerelement zugrunde liegende Handle erstellt wurde.

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, 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, args As Object()) As IAsyncResult
Public Function BeginInvoke (method As Delegate, ParamArray args As Object()) As IAsyncResult

Parameter

method
Delegate

Ein Delegat einer Methode, der Parameter derselben Anzahl und desselben Typs der im args-Parameter enthaltenen Parameter annimmt.

args
Object[]

Ein Array von Objekten, die als Argumente an die angegebene Methode übergeben werden sollen. Dies kann null sein, wenn keine Argumente benötigt werden.

Gibt zurück

IAsyncResult

Ein IAsyncResult-Objekt, das das Ergebnis der BeginInvoke(Delegate)-Operation darstellt.

Implementiert

Ausnahmen

Kein entsprechendes Fensterhandle wird gefunden.

Beispiele

Im folgenden Codebeispiel wird die Verwendung der BeginInvoke Methode veranschaulicht.

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

Hinweise

Die Stellvertretung wird asynchron aufgerufen, und diese Methode wird sofort zurückgegeben. Sie können diese Methode aus jedem Thread aufrufen, auch den Thread, der den Handle des Steuerelements besitzt. Wenn der Handle des Steuerelements noch nicht vorhanden ist, durchsucht diese Methode die übergeordnete Kette des Steuerelements, bis es ein Steuerelement oder Formular findet, das über einen Fensterziehpunkt verfügt. Wenn kein geeigneter Handle gefunden werden kann, BeginInvoke wird eine Ausnahme ausgelöst. Ausnahmen innerhalb der Stellvertretungsmethode gelten als nicht trappiert und werden an den nicht abgetrappten Ausnahmehandler der Anwendung gesendet.

Sie können aufrufen EndInvoke , um den Rückgabewert aus der Stellvertretung abzurufen, falls nekzesär, dies ist jedoch nicht erforderlich. EndInvoke blockiert, bis der Rückgabewert abgerufen werden kann.

Hinweis

Die meisten Methoden für ein Steuerelement können nur über den Thread aufgerufen werden, in dem das Steuerelement erstellt wurde. Neben der InvokeRequired Eigenschaft gibt es vier Methoden für ein Steuerelement, das threadsicher ist: Invoke, BeginInvoke, , EndInvoke, und CreateGraphics wenn der Handle für das Steuerelement bereits erstellt wurde. Aufrufe CreateGraphics , bevor der Steuerpunkt des Steuerelements in einem Hintergrundthread erstellt wurde, kann zu illegalen Threadaufrufen führen. Für alle anderen Methodenaufrufe sollten Sie eine der Aufrufmethoden verwenden, um den Aufruf an den Thread des Steuerelements zu marshallen. Die Aufrufmethoden rufen immer ihre Rückrufe im Thread des Steuerelements auf.

Hinweis

Eine Ausnahme kann ausgelöst werden, wenn der Thread, der die Nachricht verarbeiten soll, nicht mehr aktiv ist.

Siehe auch

Gilt für

BeginInvoke(Action)

Führt den angegebenen Delegaten asynchron für den Thread aus, in dem das dem Steuerelement zugrunde liegende Handle erstellt wurde.

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

Parameter

method
Action

Ein Delegat für eine Methode, die keine Parameter annimmt.

Gibt zurück

IAsyncResult

Ein IAsyncResult-Objekt, das das Ergebnis der BeginInvoke(Action)-Operation darstellt.

Gilt für

BeginInvoke(Delegate)

Führt den angegebenen Delegaten asynchron für den Thread aus, in dem das dem Steuerelement zugrunde liegende Handle erstellt wurde.

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

Parameter

method
Delegate

Ein Delegat für eine Methode, die keine Parameter annimmt.

Gibt zurück

IAsyncResult

Ein IAsyncResult-Objekt, das das Ergebnis der BeginInvoke(Delegate)-Operation darstellt.

Ausnahmen

Kein entsprechendes Fensterhandle wird gefunden.

Beispiele

Im folgenden Codebeispiel wird die Verwendung der BeginInvoke Methode veranschaulicht.

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

Hinweise

Die Stellvertretung wird asynchron aufgerufen, und diese Methode wird sofort zurückgegeben. Sie können diese Methode aus jedem Thread aufrufen, auch den Thread, der den Handle des Steuerelements besitzt. Wenn der Handle des Steuerelements noch nicht vorhanden ist, durchsucht diese Methode die übergeordnete Kette des Steuerelements, bis es ein Steuerelement oder Formular findet, das über einen Fensterziehpunkt verfügt. Wenn kein geeigneter Handle gefunden werden kann, BeginInvoke wird eine Ausnahme ausgelöst. Ausnahmen innerhalb der Stellvertretungsmethode gelten als nicht trappiert und werden an den nicht abgetrappten Ausnahmehandler der Anwendung gesendet.

Sie können aufrufen EndInvoke , um den Rückgabewert aus der Stellvertretung abzurufen, falls nekzesär, dies ist jedoch nicht erforderlich. EndInvoke blockiert, bis der Rückgabewert abgerufen werden kann.

Hinweis

Die meisten Methoden für ein Steuerelement können nur über den Thread aufgerufen werden, in dem das Steuerelement erstellt wurde. Neben der InvokeRequired Eigenschaft gibt es vier Methoden für ein Steuerelement, das threadsicher ist: Invoke, BeginInvoke, , EndInvoke, und CreateGraphics wenn der Handle für das Steuerelement bereits erstellt wurde. Aufrufe CreateGraphics , bevor der Steuerpunkt des Steuerelements in einem Hintergrundthread erstellt wurde, kann zu illegalen Threadaufrufen führen. Für alle anderen Methodenaufrufe sollten Sie eine der Aufrufmethoden verwenden, um den Aufruf an den Thread des Steuerelements zu marshallen. Die Aufrufmethoden rufen immer ihre Rückrufe im Thread des Steuerelements auf.

Hinweis

Eine Ausnahme kann ausgelöst werden, wenn der Thread, der die Nachricht verarbeiten soll, nicht mehr aktiv ist.

Siehe auch

Gilt für