AsyncOperation.Post(SendOrPostCallback, Object) Metode
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
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
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.
d
adalah 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.