IAsyncActionWithProgress<TProgress> Interfaz
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Representa una acción asincrónica que puede notificar actualizaciones de progreso a los llamadores. Este es el tipo de valor devuelto para todos los métodos asincrónicos Windows Runtime que no tienen un objeto de resultado, pero que notifican el progreso de los agentes de escucha de devolución de llamada.
public interface class IAsyncActionWithProgress : IAsyncInfo
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.FoundationContract, 65536)]
/// [Windows.Foundation.Metadata.Guid(527282776, 59395, 18593, 149, 70, 235, 115, 83, 57, 136, 132)]
template <typename TProgress>
struct IAsyncActionWithProgress : IAsyncInfo
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.FoundationContract), 65536)]
[Windows.Foundation.Metadata.Guid(527282776, 59395, 18593, 149, 70, 235, 115, 83, 57, 136, 132)]
public interface IAsyncActionWithProgress<TProgress> : IAsyncInfo
Public Interface IAsyncActionWithProgress(Of TProgress)
Implements IAsyncInfo
Parámetros de tipo
- TProgress
- Atributos
- Implementaciones
Requisitos de Windows
Familia de dispositivos |
Windows 10 (se introdujo en la versión 10.0.10240.0)
|
API contract |
Windows.Foundation.FoundationContract (se introdujo en la versión v1.0)
|
Ejemplos
Por ejemplo, código de C++/WinRT que ilustra cómo controlar el evento Progress , consulte Delegate types for as asincrónica actions and operations(Tipos delegados para acciones y operaciones asincrónicas).
Comentarios
IAsyncActionWithProgress TProgress<> es el tipo de valor devuelto para todos los métodos asincrónicos Windows Runtime que no comunican un objeto de resultado, pero permiten que una aplicación compruebe el progreso de la acción. No hay casi tantos como muchos de ellos, ya que hay métodos que usan IAsyncAction. IAsyncAction Las API no notifican el progreso y no tienen un resultado.
Cuando usas métodos que devuelven IAsyncActionWithProgress TProgress<> en el código de la aplicación, normalmente no tienes acceso al valor devuelto de IAsyncAction directamente. Esto se debe a que casi siempre usa la sintaxis awaitable específica del lenguaje. En este caso, el valor devuelto aparente del método es void. Para obtener más información, vea Programación asincrónica o una de las guías específicas del lenguaje para Windows Runtime programación asincrónica (llamar a las API asincrónicas en C# o Visual Basic, C++, JavaScript).
No es habitual usar IAsyncActionWithProgress TProgress<> directamente incluso si no usa una sintaxis awaitable específica del lenguaje. Cada uno de los lenguajes tiene puntos de extensión que generalmente son más fáciles de usar que la interfaz Windows Runtime. JavaScript tiene WinJS.Promise y, a continuación, con la sintaxis onProgress . .NET tiene los métodos de extensión AsTask y, una vez que IAsyncActionWithProgress TProgress<> se convierte en una tarea, es más fácil cancelar, obtener notificaciones al finalizar, usar IProgress<T>, etc. Para C++/CX, puede ajustar las llamadas mediante el runtime de simultaneidad (y usar create_task). En otras palabras, IAsyncActionWithProgress TProgress<> se puede considerar infraestructura de nivel de tiempo de ejecución, que cada uno de los lenguajes usa como marco para admitir la sintaxis esperada o los modelos de programación asincrónica de su propia manera.
En concreto, si desea controlar el progreso en el código de .NET, use la firma AsTask que en un uso de extensión tiene un único parámetro de referencia de IProgress . (En este uso, la unidad de progreso ya está restringida y coincide con el método IAsyncActionWithProgress que usa). Proporcione un objeto que implemente IProgress y la implementación del método Report se invoca cada vez que el método Windows Runtime notifica una notificación de progreso.
Para supervisar el progreso de la acción (si no se usan las técnicas específicas del lenguaje descritas anteriormente), establezca la propiedad Progress, proporcionándole el nombre de un método que implementa el delegado TProgressHandler de AsyncActionProgressHandler<>.
Funciones de extensión de C++/WinRT
Nota
Existen funciones de extensión en los tipos de proyección de C++/WinRT para determinadas API de Windows Runtime. Por ejemplo, winrt::Windows::Foundation::IAsyncAction es el tipo de proyección de C++/WinRT para IAsyncAction. Las funciones de extensión no forman parte de la superficie de la interfaz binaria de la aplicación (ABI) de los tipos de Windows Runtime reales, por lo que no se muestran como miembros de las API de Windows Runtime. Pero puedes llamarlos desde cualquier proyecto de C++/WinRT. Consulta Funciones de C++/WinRT que amplían las API de Windows Runtime.
void get() const;
Espera sincrónicamente a que se complete la acción. Produce una excepción correspondiente si se cancela la acción o especifica un estado de error. No debe llamarlo desde un apartamento de un solo subproceso. Para obtener más información y ejemplos de código que muestran cómo llamar a get, consulta Escribir una corrutina.
AsyncStatus wait_for(TimeSpan const& timeout) const;
Espera sincrónicamente para que se complete la acción o para el tiempo de espera especificado. Devuelve el estado de IAsyncActionWithProgress o AsyncStatus::Started si ha transcurrido el tiempo de espera. Si la acción no ha agotado el tiempo de espera, llame a GetResults para obtener los resultados de la acción. Para obtener más información y ejemplos de código que muestran cómo llamar a wait_for, consulta Tiempos de espera asincrónicos facilitados.
Herencia de interfaz
IAsyncActionWithProgress TProgress<> hereda IAsyncInfo. Los tipos que implementan IAsyncActionWithProgress TProgress<> también implementan los miembros de la interfaz de IAsyncInfo:
Notas para los implementadores
Al igual que con la llamada a los métodos existentes, hay formas específicas del lenguaje para definir métodos asincrónicos que no usan IAsyncActionWithProgress TProgress<> directamente. Si escribe código mediante .NET, el método puede devolver una tarea. Para C++/CX, puede usar el runtime de simultaneidad. Sin embargo, si va a definir un componente, puede usar latarea Tarea/ internamente, pero debe devolver una de las interfaces Windows Runtime para los métodos públicos. Los tipos de soporte asincrónico específicos del lenguaje (y muchos otros tipos específicos del lenguaje que se pueden usar convencionalmente en el código) no se pueden usar para el área expuesta pública de un componente de Windows Runtime.
Propiedades
Completed |
Obtiene o establece el delegado al que se llama cuando se completa la acción. |
ErrorCode |
Obtiene una cadena que describe una condición de error de la operación asincrónica. (Heredado de IAsyncInfo) |
Id |
Obtiene el identificador de la operación asincrónica. (Heredado de IAsyncInfo) |
Progress |
Obtiene o establece el método de devolución de llamada que recibe la notificación de progreso. |
Status |
Obtiene un valor que indica el estado de la operación asincrónica. (Heredado de IAsyncInfo) |
Métodos
Cancel() |
Cancela la operación asincrónica. (Heredado de IAsyncInfo) |
Close() |
Cierra la operación asincrónica. (Heredado de IAsyncInfo) |
GetResults() |
Devuelve los resultados de la acción. |