AsyncOperation.Post(SendOrPostCallback, Object) Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
İş 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
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.