Control.BeginInvoke Metod

Definition

Kör ett ombud asynkront på den tråd som kontrollens underliggande handtag skapades på.

Överlagringar

Name Description
BeginInvoke(Delegate)

Kör det angivna ombudet asynkront på den tråd som kontrollens underliggande handtag skapades på.

BeginInvoke(Delegate, Object[])

Kör det angivna ombudet asynkront med de angivna argumenten i den tråd som kontrollens underliggande handtag skapades på.

BeginInvoke(Delegate)

Kör det angivna ombudet asynkront på den tråd som kontrollens underliggande handtag skapades på.

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

Parametrar

method
Delegate

Ett ombud till en metod som inte tar några parametrar.

Returer

En IAsyncResult som representerar resultatet av åtgärden BeginInvoke(Delegate) .

Undantag

Det går inte att hitta något lämpligt fönsterhandtag.

Exempel

I följande kodexempel visas en användning av BeginInvoke metoden.

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

Kommentarer

Ombudet kallas asynkront och den här metoden returnerar omedelbart. Du kan anropa den här metoden från valfri tråd, även den tråd som äger kontrollens handtag. Om kontrollens handtag inte finns ännu söker den här metoden upp kontrollens överordnade kedja tills den hittar en kontroll eller ett formulär som har ett fönsterhandtag. Om inget lämpligt handtag kan hittas utlöser BeginInvoke ett undantag. Undantag inom delegatmetoden anses vara ohörda och skickas till programmets ohörda undantagshanterare.

Du kan anropa EndInvoke för att hämta returvärdet från ombudet, om det inte behövs, men detta krävs inte. EndInvoke blockeras tills returvärdet kan hämtas.

Note

De flesta metoder på en kontroll kan bara anropas från tråden där kontrollen skapades. Förutom egenskapen InvokeRequired finns det fyra metoder på en kontroll som är trådsäker: Invoke, BeginInvoke, EndInvokeoch CreateGraphics om handtaget för kontrollen redan har skapats. Att anropa CreateGraphics innan kontrollens handtag har skapats i en bakgrundstråd kan orsaka olagliga korstrådsanrop. För alla andra metodanrop bör du använda någon av anropande metoderna för att konvertera anropet till kontrollens tråd. Anropa metoderna anropar alltid sina återanrop i kontrollens tråd.

Note

Ett undantag kan uppstå om tråden som ska bearbeta meddelandet inte längre är aktiv.

Se även

Gäller för

BeginInvoke(Delegate, Object[])

Kör det angivna ombudet asynkront med de angivna argumenten i den tråd som kontrollens underliggande handtag skapades på.

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

Parametrar

method
Delegate

Ett ombud till en metod som tar parametrar av samma nummer och typ som finns i parametern args .

args
Object[]

En matris med objekt som ska skickas som argument till den angivna metoden. Detta kan vara null om inga argument behövs.

Returer

En IAsyncResult som representerar resultatet av åtgärden BeginInvoke(Delegate) .

Implementeringar

Undantag

Det går inte att hitta något lämpligt fönsterhandtag.

Exempel

I följande kodexempel visas en användning av BeginInvoke metoden.

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

Kommentarer

Ombudet kallas asynkront och den här metoden returnerar omedelbart. Du kan anropa den här metoden från valfri tråd, även den tråd som äger kontrollens handtag. Om kontrollens handtag inte finns ännu söker den här metoden upp kontrollens överordnade kedja tills den hittar en kontroll eller ett formulär som har ett fönsterhandtag. Om inget lämpligt handtag kan hittas utlöser BeginInvoke ett undantag. Undantag inom delegatmetoden anses vara ohörda och skickas till programmets ohörda undantagshanterare.

Du kan anropa EndInvoke för att hämta returvärdet från ombudet, om det inte behövs, men detta krävs inte. EndInvoke blockeras tills returvärdet kan hämtas.

Note

De flesta metoder på en kontroll kan bara anropas från tråden där kontrollen skapades. Förutom egenskapen InvokeRequired finns det fyra metoder på en kontroll som är trådsäker: Invoke, BeginInvoke, EndInvokeoch CreateGraphics om handtaget för kontrollen redan har skapats. Att anropa CreateGraphics innan kontrollens handtag har skapats i en bakgrundstråd kan orsaka olagliga korstrådsanrop. För alla andra metodanrop bör du använda någon av anropande metoderna för att konvertera anropet till kontrollens tråd. Anropa metoderna anropar alltid sina återanrop i kontrollens tråd.

Note

Ett undantag kan uppstå om tråden som ska bearbeta meddelandet inte längre är aktiv.

Se även

Gäller för