IAsyncOperationWithProgress<TResult,TProgress> Interfaccia
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Rappresenta un'operazione asincrona che può segnalare gli aggiornamenti dello stato dei chiamanti. Si tratta del tipo restituito per molti metodi asincroni Windows Runtime che hanno risultati e anche lo stato di avanzamento del report.
public interface class IAsyncOperationWithProgress : IAsyncInfo
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.FoundationContract, 65536)]
/// [Windows.Foundation.Metadata.Guid(3050321623, 58007, 18831, 186, 96, 2, 137, 231, 110, 35, 221)]
template <typename TResult, typename TProgress>
struct IAsyncOperationWithProgress : IAsyncInfo
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.FoundationContract), 65536)]
[Windows.Foundation.Metadata.Guid(3050321623, 58007, 18831, 186, 96, 2, 137, 231, 110, 35, 221)]
public interface IAsyncOperationWithProgress<TResult,TProgress> : IAsyncInfo
Public Interface IAsyncOperationWithProgress(Of TResult, TProgress)
Implements IAsyncInfo
Parametri di tipo
- TResult
- TProgress
- Derivato
- Attributi
- Implementazioni
Requisiti Windows
Famiglia di dispositivi |
Windows 10 (è stato introdotto in 10.0.10240.0)
|
API contract |
Windows.Foundation.FoundationContract (è stato introdotto in v1.0)
|
Commenti
IAsyncOperationWithProgress TResult,TProgress<> è il tipo restituito per molti Windows Runtime metodi asincroni che hanno un risultato al completamento e supportano anche le notifiche che segnalano lo stato di avanzamento del report (che i chiamanti possono sottoscrivere assegnando un callback per Progress). Ciò costituisce circa 100 API di Windows Runtime diverse. Le API che non segnalano lo stato di avanzamento (ma hanno un risultato) usano un'altra interfaccia, IAsyncOperation<TResult>.
Quando si usano metodi che restituiscono IAsyncOperationWithProgress TResult,TProgress<> (con un vincolo specifico TResult) nel codice dell'app, in genere non si accede direttamente al valore restituito IAsyncOperationWithProgress. Questo perché si usa quasi sempre la sintassi attendabile specifica del linguaggio. In questo caso, il valore restituito apparente del metodo è il tipo fornito come parametro TResult . Per altre informazioni, vedere Programmazione asincrona o una delle guide specifiche del linguaggio per Windows Runtime programmazione asincrona (Chiamare API asincrone in C# o Visual Basic, C++, JavaScript).
Non è comune usare direttamente IAsyncOperationWithProgress TResult, TProgress<> direttamente anche se non si usa una sintassi attendabile specifica del linguaggio. Ognuna delle lingue include punti di estensione che sono in genere più facili da usare rispetto all'interfaccia Windows Runtime. JavaScript ha WinJS.Promise e la sintassi successiva. .NET ha il metodo di estensione AsTask e una volta che IAsyncOperationWithProgress<TResult,TProgress> viene convertito in un'attività <TResult>, è più facile ottenere il risultato, annullare, ottenere la notifica al completamento e così via. Per C++/CX è possibile eseguire il wrapping delle chiamate usando il runtime di concorrenza (e usare create_task). In altre parole, IAsyncOperationWithProgress TResult,TProgress<> può essere considerata infrastruttura a livello di runtime, che ognuno dei linguaggi usa come framework per supportare la sintassi attendebile o i modelli di programmazione asincroni in modo personalizzato.
In particolare, se si vuole gestire lo stato di avanzamento nel codice .NET, usare la firma AsTask che in un utilizzo dell'estensione ha un singolo parametro di riferimento IProgress . In questo utilizzo, l'unità di stato è già vincolata e corrisponde al metodo IAsyncOperationWithProgress in uso. Specificare un oggetto che implementa IProgress e l'implementazione del metodo Report viene richiamata ogni volta che il metodo Windows Runtime segnala una notifica di stato.
Per monitorare lo stato di avanzamento dell'azione (se non usando le tecniche specifiche del linguaggio descritte in precedenza), impostare la proprietà Progress , specificando il nome di un metodo che implementa il delegato AsyncOperationProgressHandler<TResult,TProgress> .
Funzioni di estensione C++/WinRT
Nota
Le funzioni di estensione esistono nei tipi di proiezione C++/WinRT per determinate API Windows Runtime. Ad esempio, winrt::Windows::Foundation::IAsyncAction è il tipo di proiezione C++/WinRT per IAsyncAction. Le funzioni di estensione non fanno parte della superficie dell'interfaccia binaria dell'applicazione (ABI) dei tipi di Windows Runtime effettivi, pertanto non sono elencati come membri delle API Windows Runtime. È tuttavia possibile chiamarli da qualsiasi progetto C++/WinRT. Vedere funzioni C++/WinRT che estendono Windows Runtime API.
TResult get() const;
Attende in modo sincrono il completamento dell'operazione e restituisce il valore completato. Genera un'eccezione corrispondente se l'operazione viene annullata o immette uno stato di errore. Non è necessario chiamarlo da un appartamento a thread singolo. Per altre informazioni e esempi di codice che illustrano come chiamare get, vedere Scrivere una coroutine.
AsyncStatus wait_for(TimeSpan const& timeout) const;
Attende in modo sincrono il completamento dell'operazione o il timeout specificato. Restituisce lo stato dell'oggetto IAsyncOperationWithProgress o AsyncStatus::Started se il timeout è trascorso. Se l'azione non ha eseguito il timeout, chiamare GetResults per ottenere i risultati dell'operazione. Per altre informazioni e esempi di codice che illustrano come chiamare wait_for, vedere Timeout asincroni semplificati.
Ereditarietà dell'interfaccia
IAsyncOperationWithProgress TResult,TProgress<> eredita IAsyncInfo. I tipi che implementano IAsyncOperationWithProgress TResult,TProgress<> implementano anche i membri dell'interfaccia di IAsyncInfo:
- Metodo Cancel
- Close , metodo
- ErrorCode , proprietà
- Id , proprietà
- Proprietà Status
Note per gli implementatori
Come per chiamare i metodi esistenti, esistono modi specifici del linguaggio per definire metodi asincroni che non usano direttamente IAsyncOperationWithProgress TResult,TProgress<>. Se si scrive codice con .NET, il metodo può restituire un oggetto Task<TResult>. Per C++/CX, è possibile usare il runtime di concorrenza. Tuttavia, se si definisce un componente, è possibile usarel'attività Attività/ internamente, ma è necessario restituire una delle interfacce Windows Runtime per i metodi pubblici. I tipi di supporto asincroni specifici del linguaggio (e molti altri tipi specifici del linguaggio usati in modo convenzionale nel codice) non possono essere usati per l'area di superficie pubblica di un componente Windows Runtime.
Proprietà
Completed |
Ottiene o imposta il delegato chiamato al termine dell'operazione. |
ErrorCode |
Ottiene una stringa che descrive una condizione di errore dell'operazione asincrona. (Ereditato da IAsyncInfo) |
Id |
Ottiene l'handle dell'operazione asincrona. (Ereditato da IAsyncInfo) |
Progress |
Ottiene o imposta il metodo che gestisce le notifiche di stato. |
Status |
Ottiene un valore che indica lo stato dell'operazione asincrona. (Ereditato da IAsyncInfo) |
Metodi
Cancel() |
Annulla l'operazione asincrona. (Ereditato da IAsyncInfo) |
Close() |
Chiude l'operazione asincrona. (Ereditato da IAsyncInfo) |
GetResults() |
Restituisce i risultati dell'operazione. |