AsyncOperation.Post(SendOrPostCallback, Object) Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Wywołuje delegata w wątku lub kontekście odpowiednim dla modelu aplikacji.
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)
Parametry
SendOrPostCallback Obiekt, który opakowuje delegata do wywołania po zakończeniu operacji.
- arg
- Object
Argument delegata zawartego w parametrze d
.
Wyjątki
Metoda PostOperationCompleted(SendOrPostCallback, Object) została wywołana wcześniej dla tego zadania.
d
to null
.
Przykłady
Poniższy przykład kodu pokazuje użycie Post metody raportowania postępu i przyrostowych wyników operacji asynchronicznej. Ten przykład kodu jest częścią większego przykładu podanego System.ComponentModel.AsyncOperationManager dla klasy.
// This method computes the list of prime numbers used by the
// IsPrime method.
private ArrayList BuildPrimeNumberList(
int numberToTest,
AsyncOperation asyncOp)
{
ProgressChangedEventArgs e = null;
ArrayList primes = new ArrayList();
int firstDivisor;
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 firstDivisor))
{
// Report to the client that a prime was found.
e = new CalculatePrimeProgressChangedEventArgs(
n,
(int)((float)n / (float)numberToTest * 100),
asyncOp.UserSuppliedState);
asyncOp.Post(this.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
Uwagi
Metoda Post wywołuje delegata określonego arg
przez parametr bez zakończenia okresu istnienia operacji asynchronicznej.
Możesz wywołać metodę Post tak często, jak chcesz, podczas gdy okres istnienia operacji asynchronicznej nie został zakończony przez wywołanie metody PostOperationCompleted. Możesz użyć metody , aby zgłosić postęp lub tymczasowe wyniki z powrotem do klientów.
d
Parametr opakowuje delegata, który chcesz wywołać, gdy chcesz opublikować aktualizację o stanie zadania asynchronicznego. Obiekt AsyncOperation zapewni wywołanie delegata w wątku lub kontekście odpowiednim dla modelu aplikacji. Metoda może opcjonalnie zgłosić zdarzenie, które powiadamia klientów o zmianie stanu, aktualizacji postępu lub nowo dostępnych wynikach przyrostowych.
Parametr arg
powinien służyć do przekazywania stanu do delegata d
opakowany przez parametr . Może to być odwołanie do obiektu AsyncOperationlub może to być System.ComponentModel.ProgressChangedEventArgs obiekt. Może być pożądane, aby utworzyć własną klasę z System.ComponentModel.ProgressChangedEventArgs , aby zapewnić dodatkowy magazyn stanu.
Uwagi dotyczące dziedziczenia
Dziedzicze muszą asynchronicznie Post(SendOrPostCallback, Object) wywołać, aby dostawcy bibliotek klas nie musieli martwić się potencjalnymi przepełnieniami stosu, jeśli zakładają asynchronię, ale określony model aplikacji ma być synchroniczny.
Uwaga: aplikacje konsolowe nie synchronizują wykonywania Post(SendOrPostCallback, Object) wywołań. Może to spowodować ProgressChanged
, że zdarzenia są wywoływane poza kolejnością. Jeśli chcesz serializować wykonywanie wywołań Post(SendOrPostCallback, Object) , zaimplementuj i zainstaluj klasę SynchronizationContext .
Aby uzyskać więcej informacji na temat implementowania klas asynchronicznych, zobacz Implementowanie asynchronicznego wzorca opartego na zdarzeniach.