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