AsyncOperation.Post(SendOrPostCallback, Object) Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Ruft einen Delegaten im Thread oder Kontext auf, der für das Anwendungsmodell geeignet ist.
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)
Parameter
Ein SendOrPostCallback Objekt, das den Delegat umschließt, der aufgerufen werden soll, wenn der Vorgang beendet wird.
- arg
- Object
Ein Argument für die Stellvertretung, die d im Parameter enthalten ist.
Ausnahmen
Die PostOperationCompleted(SendOrPostCallback, Object) Methode wurde zuvor für diesen Vorgang aufgerufen.
d ist null.
Beispiele
Im folgenden Codebeispiel wird die Verwendung der Post Methode zum Melden des Fortschritts und der inkrementellen Ergebnisse eines asynchronen Vorgangs veranschaulicht. Dieses Codebeispiel ist Teil eines größeren Beispiels, das für die System.ComponentModel.AsyncOperationManager Klasse bereitgestellt wird.
// 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
Hinweise
Die Post Methode ruft den durch den arg Parameter angegebenen Delegaten auf, ohne die Lebensdauer des asynchronen Vorgangs zu beenden.
Sie können die Post Methode so oft aufrufen, wie Sie möchten, während die Lebensdauer des asynchronen Vorgangs nicht durch einen Aufruf PostOperationCompletedbeendet wurde. Sie können die Methode verwenden, um Fortschritts- oder Zwischenergebnisse an Clients zurückzumelden.
Der d Parameter umschließt die Stellvertretung, die Sie aufrufen möchten, wenn Sie eine Aktualisierung über den Status der asynchronen Aufgabe bereitstellen möchten. Das AsyncOperation Objekt stellt sicher, dass Ihre Stellvertretung für den Thread oder den Kontext aufgerufen wird, der für das Anwendungsmodell geeignet ist. Ihre Methode kann optional ein Ereignis auslösen, das Clients über eine Statusänderung, statusaktualisierung oder neu verfügbare inkrementelle Ergebnisse benachrichtigt.
Der arg Parameter sollte verwendet werden, um den Zustand an den delegat zu übergeben, der d vom Parameter umschlossen wird. Möglicherweise handelt es sich um einen Verweis auf ein AsyncOperationObjekt oder um ein System.ComponentModel.ProgressChangedEventArgs Objekt. Es kann wünschenswert sein, Ihre eigene Klasse abzuleiten, System.ComponentModel.ProgressChangedEventArgs um zusätzlichen Zustandsspeicher bereitzustellen.
Hinweise für Vererber
Erber müssen den Post(SendOrPostCallback, Object) Aufruf asynchron machen, damit Klassenbibliotheksanbieter sich nicht mit potenziellen Stapelüberläufen befassen müssen, wenn sie asynchron annehmen, aber ein bestimmtes Anwendungsmodell synchron ist.
Hinweis: Konsolenanwendungen synchronisieren nicht die Ausführung von Post(SendOrPostCallback, Object) Aufrufen. Dies kann dazu führen, dass ProgressChanged Ereignisse außerhalb der Reihenfolge ausgelöst werden. Wenn Sie die serialisierte Ausführung von Post(SendOrPostCallback, Object) Aufrufen wünschen, implementieren und installieren Sie eine SynchronizationContext Klasse.
Weitere Informationen zum Implementieren asynchroner Klassen finden Sie unter Implementieren des ereignisbasierten asynchronen Musters.