Control.BeginInvoke Methode

Definitie

Hiermee wordt een gemachtigde asynchroon uitgevoerd op de thread waarop de onderliggende ingang van het besturingselement is gemaakt.

Overloads

Name Description
BeginInvoke(Delegate)

Hiermee wordt de opgegeven gemachtigde asynchroon uitgevoerd op de thread waarop de onderliggende ingang van het besturingselement is gemaakt.

BeginInvoke(Delegate, Object[])

Hiermee wordt de opgegeven gemachtigde asynchroon uitgevoerd met de opgegeven argumenten, op de thread waarop de onderliggende ingang van het besturingselement is gemaakt.

BeginInvoke(Delegate)

Hiermee wordt de opgegeven gemachtigde asynchroon uitgevoerd op de thread waarop de onderliggende ingang van het besturingselement is gemaakt.

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

Een gemachtigde voor een methode waarvoor geen parameters nodig zijn.

Retouren

Een IAsyncResult die het resultaat van de BeginInvoke(Delegate) bewerking aangeeft.

Uitzonderingen

Er is geen geschikte venstergreep gevonden.

Voorbeelden

In het volgende codevoorbeeld ziet u een gebruik van de BeginInvoke methode.

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

Opmerkingen

De gemachtigde wordt asynchroon aangeroepen en deze methode retourneert onmiddellijk. U kunt deze methode aanroepen vanuit elke thread, zelfs de thread die eigenaar is van de ingang van het besturingselement. Als de ingang van het besturingselement nog niet bestaat, wordt met deze methode gezocht naar de bovenliggende keten van het besturingselement totdat er een besturingselement of formulier wordt gevonden dat wel een venstergreep heeft. Als er geen geschikte ingang kan worden gevonden, BeginInvoke genereert u een uitzondering. Uitzonderingen binnen de gedelegeerde methode worden beschouwd als niet-afgenomen en worden verzonden naar de niet-afgemaakte uitzonderingshandler van de toepassing.

U kunt aanroepen EndInvoke om de retourwaarde van de gemachtigde op te halen, indien nodig, maar dit is niet vereist. EndInvoke wordt geblokkeerd totdat de retourwaarde kan worden opgehaald.

Note

De meeste methoden voor een besturingselement kunnen alleen worden aangeroepen vanuit de thread waar het besturingselement is gemaakt. Naast de InvokeRequired eigenschap zijn er vier methoden voor een besturingselement dat threadveilig is: Invoke, BeginInvoke, EndInvokeen CreateGraphics als de ingang voor het besturingselement al is gemaakt. Het aanroepen CreateGraphics voordat de ingang van het besturingselement is gemaakt op een achtergrondthread kan ongeldige cross thread-aanroepen veroorzaken. Voor alle andere methode-aanroepen moet u een van de aanroepmethoden gebruiken om de aanroep naar de thread van het besturingselement te marshalen. De aanroepmethoden roepen altijd hun callbacks aan op de thread van het besturingselement.

Note

Er kan een uitzondering optreden als de thread die het bericht moet verwerken niet meer actief is.

Zie ook

Van toepassing op

BeginInvoke(Delegate, Object[])

Hiermee wordt de opgegeven gemachtigde asynchroon uitgevoerd met de opgegeven argumenten, op de thread waarop de onderliggende ingang van het besturingselement is gemaakt.

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

Parameters

method
Delegate

Een gemachtigde voor een methode die parameters van hetzelfde nummer en type gebruikt die zijn opgenomen in de args parameter.

args
Object[]

Een matrix van objecten die als argumenten moeten worden doorgegeven aan de opgegeven methode. Dit kan zijn null als er geen argumenten nodig zijn.

Retouren

Een IAsyncResult die het resultaat van de BeginInvoke(Delegate) bewerking aangeeft.

Implementeringen

Uitzonderingen

Er is geen geschikte venstergreep gevonden.

Voorbeelden

In het volgende codevoorbeeld ziet u een gebruik van de BeginInvoke methode.

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

Opmerkingen

De gemachtigde wordt asynchroon aangeroepen en deze methode retourneert onmiddellijk. U kunt deze methode aanroepen vanuit elke thread, zelfs de thread die eigenaar is van de ingang van het besturingselement. Als de ingang van het besturingselement nog niet bestaat, wordt met deze methode gezocht naar de bovenliggende keten van het besturingselement totdat er een besturingselement of formulier wordt gevonden dat wel een venstergreep heeft. Als er geen geschikte ingang kan worden gevonden, BeginInvoke genereert u een uitzondering. Uitzonderingen binnen de gedelegeerde methode worden beschouwd als niet-afgenomen en worden verzonden naar de niet-afgemaakte uitzonderingshandler van de toepassing.

U kunt aanroepen EndInvoke om de retourwaarde van de gemachtigde op te halen, indien nodig, maar dit is niet vereist. EndInvoke wordt geblokkeerd totdat de retourwaarde kan worden opgehaald.

Note

De meeste methoden voor een besturingselement kunnen alleen worden aangeroepen vanuit de thread waar het besturingselement is gemaakt. Naast de InvokeRequired eigenschap zijn er vier methoden voor een besturingselement dat threadveilig is: Invoke, BeginInvoke, EndInvokeen CreateGraphics als de ingang voor het besturingselement al is gemaakt. Het aanroepen CreateGraphics voordat de ingang van het besturingselement is gemaakt op een achtergrondthread kan ongeldige cross thread-aanroepen veroorzaken. Voor alle andere methode-aanroepen moet u een van de aanroepmethoden gebruiken om de aanroep naar de thread van het besturingselement te marshalen. De aanroepmethoden roepen altijd hun callbacks aan op de thread van het besturingselement.

Note

Er kan een uitzondering optreden als de thread die het bericht moet verwerken niet meer actief is.

Zie ook

Van toepassing op