Control.BeginInvoke Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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
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
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
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.