Aracılığıyla paylaş


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ılmak üzere 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 değeridir.

Ö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.
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

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 PostOperationCompletedsonlandırılmamışken yöntemini istediğiniz sıklıkta çağırabilirsinizPost. İlerleme durumunu veya ara sonuçları istemcilere geri raporlamak için yöntemini kullanabilirsiniz.

d zaman uyumsuz görevin durumu hakkında bir güncelleştirme göndermek istediğinizde, parametresi çağrılmasını istediğiniz temsilciyi sarmalar. nesnesi, AsyncOperation temsilcinizin uygulama modeli için 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 parametresi tarafından d sarmalanan temsilciye durum geçirmek için kullanılmalıdır. Bir öğesine başvuru AsyncOperationveya nesne System.ComponentModel.ProgressChangedEventArgs olabilir. Ek durum depolama alanı sağlamak için kendi sınıfınızı türetmek System.ComponentModel.ProgressChangedEventArgs istenebilir.

Devralanlara Notlar

Sınıf kitaplığı sağlayıcılarının Post(SendOrPostCallback, Object) zaman uyumsuz olduğunu varsayan ancak belirli bir uygulama modelinin zaman uyumlu olduğu varsayılırsa, sınıf kitaplığı sağlayıcılarının olası yığın taşmalarıyla ilgilenmeleri gerekmemesi için, devralıcıların çağrıyı zaman uyumsuz hale getirmesi gerekir.

Not: Konsol uygulamaları çağrıların yürütülmesini Post(SendOrPostCallback, Object) eşitlemez. Bu, olayların sıra dışı bir şekilde tetiklenmesine neden ProgressChanged olabilir. Çağrıların serileştirilmiş yürütülmesini Post(SendOrPostCallback, Object) 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.