Bagikan melalui


AsyncOperation.Post(SendOrPostCallback, Object) Metode

Definisi

Memanggil delegasi pada utas atau konteks yang sesuai untuk model aplikasi.

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

d
SendOrPostCallback

Objek SendOrPostCallback yang membungkus delegasi untuk dipanggil ketika operasi berakhir.

arg
Object

Argumen untuk delegasi yang terkandung dalam d parameter .

Pengecualian

Metode PostOperationCompleted(SendOrPostCallback, Object) ini telah dipanggil sebelumnya untuk tugas ini.

dadalah null.

Contoh

Contoh kode berikut menunjukkan penggunaan Post metode untuk melaporkan kemajuan dan hasil inkremental dari operasi asinkron. Contoh kode ini adalah bagian dari contoh yang lebih besar yang disediakan untuk System.ComponentModel.AsyncOperationManager kelas .

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

Keterangan

Metode memanggil Post delegasi yang ditentukan oleh arg parameter tanpa mengakhiri masa pakai operasi asinkron.

Anda dapat memanggil Post metode sesering yang Anda suka sementara masa pakai operasi asinkron belum diakhapi oleh panggilan ke PostOperationCompleted. Anda dapat menggunakan metode untuk melaporkan kemajuan atau hasil sementara kembali ke klien.

Parameter d membungkus delegasi yang ingin Anda panggil saat Anda ingin memposting pembaruan tentang status tugas asinkron. Objek AsyncOperation akan memastikan bahwa delegasi Anda dipanggil pada utas atau konteks yang sesuai untuk model aplikasi. Metode Anda dapat secara opsional menaikkan peristiwa yang memberi tahu klien tentang perubahan status, pembaruan kemajuan, atau hasil inkremental yang baru tersedia.

Parameter arg harus digunakan untuk meneruskan status ke delegasi yang d dibungkus oleh parameter . Ini mungkin referensi ke AsyncOperation, atau mungkin objek System.ComponentModel.ProgressChangedEventArgs . Mungkin diinginkan untuk memperoleh kelas Anda sendiri dari System.ComponentModel.ProgressChangedEventArgs untuk menyediakan penyimpanan status tambahan.

Catatan Bagi Inheritor

Pewaris harus membuat Post(SendOrPostCallback, Object) pemanggilan asinkron, sehingga penyedia pustaka kelas tidak perlu khawatir dengan potensi luapan tumpukan jika mereka mengasumsikan asinkron tetapi model aplikasi tertentu kebetulan sinkron.

Catatan: Aplikasi konsol tidak menyinkronkan eksekusi Post(SendOrPostCallback, Object) panggilan. Ini dapat menyebabkan ProgressChanged peristiwa dinaikkan tidak berurutan. Jika Anda ingin melakukan eksekusi Post(SendOrPostCallback, Object) panggilan yang diserialkan, terapkan dan instal SynchronizationContext kelas.

Untuk informasi selengkapnya tentang menerapkan kelas asinkron, lihat Menerapkan Pola Asinkron berbasis Peristiwa.

Berlaku untuk

Lihat juga