AsyncOperation.Post(SendOrPostCallback, Object) Yöntem

Tanım

İş parçacığında veya uygulama modeline uygun bağlamda bir temsilci çağırır.

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)

Parametreler

d
SendOrPostCallback

SendOrPostCallback İşlem sona erdiğinde çağrılacak temsilciyi sarmalayan nesne.

arg
Object

parametresinde yer alan temsilci için d bir bağımsız değişken.

Özel durumlar

Yöntemi PostOperationCompleted(SendOrPostCallback, Object) daha önce bu görev için çağrıldı.

d, null'e eşittir.

Örnekler

Aşağıdaki kod örneği, zaman uyumsuz bir işlemin ilerleme durumunu Post ve artımlı sonuçlarını raporlamak için yönteminin kullanılmasını gösterir. Bu kod örneği, sınıfı için System.ComponentModel.AsyncOperationManager sağlanan daha büyük bir örneğin parçasıdır.

// 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

Açıklamalar

yöntemi, Post zaman uyumsuz işlemin ömrünü sonlandırmadan parametresi tarafından arg belirtilen temsilciyi çağırır.

Zaman uyumsuz işlemin ömrü çağrısıyla sonlandırılmamışken yöntemini istediğiniz sıklıkta çağırabilirsiniz PostPostOperationCompleted. İlerleme durumunu veya ara sonuçları istemcilere geri bildirmek için yöntemini kullanabilirsiniz.

Parametresi, d zaman uyumsuz görevin durumu hakkında bir güncelleştirme göndermek istediğinizde çağrılmasını istediğiniz temsilciyi sarmalar. nesnesi, AsyncOperation temsilcinizin uygulama modeline uygun iş parçacığında veya bağlamda çağrılmasını sağlar. Yönteminiz isteğe bağlı olarak istemcilere durum değişikliği, ilerleme güncelleştirmesi veya yeni kullanılabilir artımlı sonuçlar bildiren bir olay oluşturabilir.

parametresi, arg parametre tarafından d sarmalanan temsilciye durum geçirmek için kullanılmalıdır. Bir öğesine başvuru AsyncOperationveya bir System.ComponentModel.ProgressChangedEventArgs nesne olabilir. Ek durum depolama alanı sağlamak için kendi sınıfınızı System.ComponentModel.ProgressChangedEventArgs türetmek istenebilir.

Devralanlara Notlar

Devralanların çağrıyı Post(SendOrPostCallback, Object) zaman uyumsuz hale getirmesi gerekir, böylece sınıf kitaplığı sağlayıcılarının zaman uyumsuz olduğunu varsayan ancak belirli bir uygulama modelinin zaman uyumlu olması durumunda olası yığın taşmalarıyla ilgilenmeleri gerekmez.

Not: Konsol uygulamaları çağrıların yürütülmesini Post(SendOrPostCallback, Object) eşitlemez. Bu, ProgressChanged olayların sırasız bir şekilde tetiklenmesine neden olabilir. Eğer Post(SendOrPostCallback, Object) çağrılarının serileştirilmiş bir şekilde yürütülmesini istiyorsanız, bir SynchronizationContext sınıfı uygulayın ve yükleyin.

Zaman uyumsuz sınıfları uygulama hakkında daha fazla bilgi için bkz. Olay Tabanlı Zaman Uyumsuz Deseni Uygulama.

Şunlara uygulanır

Ayrıca bkz.