Control.BeginInvoke Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
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.