AsyncOperation.Post(SendOrPostCallback, Object) 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.
Anropar ett ombud i tråden eller kontexten som är lämplig för programmodellen.
public:
void Post(System::Threading::SendOrPostCallback ^ d, System::Object ^ arg);
public void Post(System.Threading.SendOrPostCallback d, 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)
Parametrar
Ett SendOrPostCallback objekt som omsluter ombudet som ska anropas när åtgärden avslutas.
- arg
- Object
Ett argument för ombudet som finns i parametern d .
Undantag
Metoden PostOperationCompleted(SendOrPostCallback, Object) har anropats tidigare för den här uppgiften.
d är null.
Exempel
I följande kodexempel visas hur du använder Post metoden för att rapportera förlopp och inkrementella resultat av en asynkron åtgärd. Det här kodexemplet är en del av ett större exempel för System.ComponentModel.AsyncOperationManager klassen.
// 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
Kommentarer
Metoden Post anropar ombudet som anges av parametern arg utan att livslängden för den asynkrona åtgärden upphör.
Du kan anropa Post metoden så ofta du vill medan livslängden för den asynkrona åtgärden inte har avslutats av ett anrop till PostOperationCompleted. Du kan använda metoden för att rapportera förlopp eller interimsresultat tillbaka till klienter.
Parametern d omsluter det ombud som du vill anropa när du vill publicera en uppdatering om statusen för den asynkrona aktiviteten. Objektet AsyncOperation ser till att ombudet anropas i tråden eller kontexten som är lämplig för programmodellen. Din metod kan också generera en händelse som meddelar klienter om en statusändring, förloppsuppdatering eller nyligen tillgängliga inkrementella resultat.
Parametern arg ska användas för att skicka tillstånd till ombudet som omsluts av parametern d . Det kan vara en referens till en AsyncOperation, eller ett System.ComponentModel.ProgressChangedEventArgs objekt. Det kan vara önskvärt att härleda din egen klass från System.ComponentModel.ProgressChangedEventArgs för att tillhandahålla ytterligare tillståndslagring.
Anteckningar till arvingar
Arvtagarna måste göra anropet Post(SendOrPostCallback, Object) asynkront, så att klassbiblioteksprovidrar inte behöver bry sig om potentiella stackspill om de antar asynkront men en viss programmodell råkar vara synkron.
Obs! Konsolprogram synkroniserar inte körningen av Post(SendOrPostCallback, Object) anrop. Detta kan leda ProgressChanged till att händelser höjs ur ordning. Om du vill ha serialiserad körning av Post(SendOrPostCallback, Object) anrop implementerar och installerar du en SynchronizationContext klass.
Mer information om hur du implementerar asynkrona klasser finns i Implementera det händelsebaserade asynkrona mönstret.