AsyncOperationManager.CreateOperation(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.
Belirli bir AsyncOperation zaman uyumsuz işlemin süresini izlemek için bir döndürür.
public:
static System::ComponentModel::AsyncOperation ^ CreateOperation(System::Object ^ userSuppliedState);
public static System.ComponentModel.AsyncOperation CreateOperation (object userSuppliedState);
public static System.ComponentModel.AsyncOperation CreateOperation (object? userSuppliedState);
static member CreateOperation : obj -> System.ComponentModel.AsyncOperation
Public Shared Function CreateOperation (userSuppliedState As Object) As AsyncOperation
Parametreler
- userSuppliedState
- Object
Görev kimliği gibi bir istemci durumu parçasını belirli bir zaman uyumsuz işlemle ilişkilendirmek için kullanılan nesne.
Döndürülenler
Zaman AsyncOperation uyumsuz yöntem çağırma süresini izlemek için kullanabileceğiniz bir.
Örnekler
Aşağıdaki kod örneği, zaman uyumsuz işlemlerin süresini izlemek için bir System.ComponentModel.AsyncOperation oluşturmak için yönteminin kullanılmasını CreateOperation gösterir. Bu kod örneği, sınıfı için AsyncOperationManager sağlanan daha büyük bir örneğin parçasıdır.
// This method starts an asynchronous calculation.
// First, it checks the supplied task ID for uniqueness.
// If taskId is unique, it creates a new WorkerEventHandler
// and calls its BeginInvoke method to start the calculation.
public virtual void CalculatePrimeAsync(
int numberToTest,
object taskId)
{
// Create an AsyncOperation for taskId.
AsyncOperation asyncOp =
AsyncOperationManager.CreateOperation(taskId);
// Multiple threads will access the task dictionary,
// so it must be locked to serialize access.
lock (userStateToLifetime.SyncRoot)
{
if (userStateToLifetime.Contains(taskId))
{
throw new ArgumentException(
"Task ID parameter must be unique",
"taskId");
}
userStateToLifetime[taskId] = asyncOp;
}
// Start the asynchronous operation.
WorkerEventHandler workerDelegate = new WorkerEventHandler(CalculateWorker);
workerDelegate.BeginInvoke(
numberToTest,
asyncOp,
null,
null);
}
' This method starts an asynchronous calculation.
' First, it checks the supplied task ID for uniqueness.
' If taskId is unique, it creates a new WorkerEventHandler
' and calls its BeginInvoke method to start the calculation.
Public Overridable Sub CalculatePrimeAsync( _
ByVal numberToTest As Integer, _
ByVal taskId As Object)
' Create an AsyncOperation for taskId.
Dim asyncOp As AsyncOperation = _
AsyncOperationManager.CreateOperation(taskId)
' Multiple threads will access the task dictionary,
' so it must be locked to serialize access.
SyncLock userStateToLifetime.SyncRoot
If userStateToLifetime.Contains(taskId) Then
Throw New ArgumentException( _
"Task ID parameter must be unique", _
"taskId")
End If
userStateToLifetime(taskId) = asyncOp
End SyncLock
' Start the asynchronous operation.
Dim workerDelegate As New WorkerEventHandler( _
AddressOf CalculateWorker)
workerDelegate.BeginInvoke( _
numberToTest, _
asyncOp, _
Nothing, _
Nothing)
End Sub
Açıklamalar
yöntemi, CreateOperation belirli bir System.ComponentModel.AsyncOperation zaman uyumsuz işlemin süresini izlemek ve işlem tamamlandığında uygulama modelini uyarmak için kullanabileceğiniz bir döndürür. İşlemi sonlandırmadan ilerleme güncelleştirmelerini ve artımlı sonuçları göndermek için de kullanabilirsiniz. , System.ComponentModel.AsyncOperation bu çağrıları uygulama modeli için uygun iş parçacığına veya bağlama doğru şekilde sıralar.
Olay Tabanlı Zaman Uyumsuz Deseni destekleyen bir sınıf uygularsanız, MethodNameAsync
yönteminiz her çağrıldığında sınıfınız çağırmalıdırCreateOperation. yöntemine çağrı yapan istemci uygulaması, zaman uyumsuz işlemin yürütülmesi sırasında tetiklenen olayları ayırt etmek amacıyla her çağrıyı benzersiz olarak tanımlamak için parametresini kullanabilir userSuppliedState
.
Dikkat
İstemci kodu, parametresi için userSuppliedState
benzersiz bir değer sağlamalıdır. Benzersiz olmayan görev kimlikleri uygulamanızın ilerleme durumunu ve diğer olayları yanlış bildirmesine neden olabilir. Kodunuz benzersiz olmayan bir görev kimliğini denetlemeli ve algılanırsa bir System.ArgumentException oluşturmalıdır.
Kodunuz tarafından CreateOperation döndürülen her System.ComponentModel.AsyncOperation bir değeri izlemeli ve güncelleştirmeleri göndermek ve işlemi sonlandırmak için ilgili temeldeki zaman uyumsuz işlemdeki nesnesini kullanmalıdır. Bu izleme, parametresini System.ComponentModel.AsyncOperation temsilciler arasında geçirmek kadar basit olabilir. Daha karmaşık tasarımlarda sınıfınız bir nesne koleksiyonu System.ComponentModel.AsyncOperation sürdürebilir, görevler başlatıldığında nesne ekleyebilir ve görevler tamamlandığında veya iptal edildiğinde bunları kaldırabilir. Bu yaklaşım benzersiz userSuppliedState
parametre değerlerini denetlemenize olanak tanır ve birden çok eşzamanlı çağrıyı destekleyen sınıflarla çalışırken kullanmanız gereken yöntemdir.
Zaman uyumsuz sınıflar uygulama hakkında daha fazla bilgi için bkz. Olay Tabanlı Zaman Uyumsuz Deseni Uygulama.