AsyncOperation.Post(SendOrPostCallback, Object) Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Roept een gemachtigde aan voor de thread of context die geschikt is voor het toepassingsmodel.
public:
void Post(System::Threading::SendOrPostCallback ^ d, System::Object ^ arg);
public void Post(System.Threading.SendOrPostCallback d, object arg);
member this.Post : System.Threading.SendOrPostCallback * obj -> unit
Public Sub Post (d As SendOrPostCallback, arg As Object)
Parameters
Een SendOrPostCallback object dat de gemachtigde terugloopt die moet worden aangeroepen wanneer de bewerking wordt beëindigd.
- arg
- Object
Een argument voor de gemachtigde in de d parameter.
Uitzonderingen
De PostOperationCompleted(SendOrPostCallback, Object) methode is eerder aangeroepen voor deze taak.
d is null.
Voorbeelden
In het volgende codevoorbeeld ziet u hoe u de methode gebruikt voor het Post rapporteren van voortgang en incrementele resultaten van een asynchrone bewerking. Dit codevoorbeeld maakt deel uit van een groter voorbeeld voor de System.ComponentModel.AsyncOperationManager klasse.
// This method computes the list of prime numbers used by the
// IsPrime method.
ArrayList BuildPrimeNumberList(
int numberToTest,
AsyncOperation asyncOp)
{
ArrayList primes = [];
int n = 5;
// Add the first prime numbers.
_ = primes.Add(2);
_ = primes.Add(3);
// Do the work.
while (n < numberToTest &&
!TaskCanceled(asyncOp.UserSuppliedState))
{
if (IsPrime(primes, n, out int firstDivisor))
{
// Report to the client that a prime was found.
ProgressChangedEventArgs e = new CalculatePrimeProgressChangedEventArgs(
n,
(int)(n / (float)numberToTest * 100),
asyncOp.UserSuppliedState);
asyncOp.Post(onProgressReportDelegate, e);
_ = primes.Add(n);
// Yield the rest of this time slice.
Thread.Sleep(0);
}
// Skip even numbers.
n += 2;
}
return primes;
}
' This method computes the list of prime numbers used by the
' IsPrime method.
Private Function BuildPrimeNumberList( _
ByVal numberToTest As Integer, _
ByVal asyncOp As AsyncOperation) As ArrayList
Dim e As ProgressChangedEventArgs = Nothing
Dim primes As New ArrayList
Dim firstDivisor As Integer
Dim n As Integer = 5
' Add the first prime numbers.
primes.Add(2)
primes.Add(3)
' Do the work.
While n < numberToTest And _
Not Me.TaskCanceled(asyncOp.UserSuppliedState)
If IsPrime(primes, n, firstDivisor) Then
' Report to the client that you found a prime.
e = New CalculatePrimeProgressChangedEventArgs( _
n, _
CSng(n) / CSng(numberToTest) * 100, _
asyncOp.UserSuppliedState)
asyncOp.Post(Me.onProgressReportDelegate, e)
primes.Add(n)
' Yield the rest of this time slice.
Thread.Sleep(0)
End If
' Skip even numbers.
n += 2
End While
Return primes
End Function
Opmerkingen
De Post methode roept de gemachtigde aan die is opgegeven door de arg parameter zonder de levensduur van de asynchrone bewerking te beëindigen.
U kunt de Post methode zo vaak aanroepen als u wilt terwijl de levensduur van de asynchrone bewerking niet is beëindigd door een aanroep naar PostOperationCompleted. U kunt de methode gebruiken om de voortgang of tussentijdse resultaten terug te rapporteren aan clients.
De d parameter verpakt de gemachtigde die u wilt aanroepen wanneer u een update wilt posten over de status van de asynchrone taak. Het AsyncOperation object zorgt ervoor dat uw gemachtigde wordt aangeroepen op de thread of context die geschikt is voor het toepassingsmodel. Uw methode kan eventueel een gebeurtenis genereren waarmee clients worden op de hoogte gesteld van een statuswijziging, voortgangsupdate of nieuw beschikbare incrementele resultaten.
De arg parameter moet worden gebruikt om de status door te geven aan de gemachtigde die door de d parameter is verpakt. Het kan een verwijzing naar een AsyncOperationof een System.ComponentModel.ProgressChangedEventArgs object zijn. Het kan wenselijk zijn om uw eigen klasse af te leiden van System.ComponentModel.ProgressChangedEventArgs om extra statusopslag te bieden.
Notities voor overnemers
Overnames moeten de Post(SendOrPostCallback, Object) aanroep asynchroon maken, zodat klassebibliotheekproviders zich niet hoeven bezig te houden met potentiële stack-overloop als ze asynchroon aannemen, maar een bepaald toepassingsmodel synchroon is.
Opmerking: Consoletoepassingen synchroniseren de uitvoering van Post(SendOrPostCallback, Object) aanroepen niet. Dit kan ertoe leiden dat ProgressChanged gebeurtenissen in verkeerde volgorde worden gegenereerd. Als u de oproepen naar Post(SendOrPostCallback, Object) in serie wilt uitvoeren, implementeert en installeert u een SynchronizationContext class.
Zie Het Asynchrone patroon op basis van gebeurtenissen implementeren voor meer informatie over het implementeren van asynchrone klassen.
Van toepassing op
Zie ook
- AsyncOperationManager
- Aanbevolen procedures voor beheerd draadbeheer
- Procedure: Een onderdeel implementeren dat het Asynchrone patroon op basis van gebeurtenissen ondersteunt