IAsyncActionWithProgress<TProgress> Интерфейс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Представляет асинхронное действие, которое может сообщать вызывающим абонентам об обновлениях хода выполнения. Это тип возвращаемого значения для всех среда выполнения Windows асинхронных методов, которые не имеют результирующих объектов, но сообщают о ходе выполнения прослушивателям обратного вызова.
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
Параметры типа
- TProgress
- Атрибуты
- Реализации
Требования к Windows
Семейство устройств |
Windows 10 (появилось в 10.0.10240.0)
|
API contract |
Windows.Foundation.FoundationContract (появилось в v1.0)
|
Примеры
Пример кода C++/WinRT , иллюстрирующих обработку события Progress , см. в разделе Типы делегатов для асинхронных действий и операций.
Комментарии
IAsyncActionWithProgress<TProgress> — это тип возвращаемого значения для всех среда выполнения Windows асинхронных методов, которые не передают объект результата, но позволяют приложению проверка ход выполнения действия. Существует не так много из них, как есть методы, использующие IAsyncAction. IAsyncAction API не сообщают о ходе выполнения и не имеют результата.
При использовании методов, возвращающих IAsyncActionWithProgress<TProgress> в коде приложения, вы, как правило, не обращаетесь к возвращаемого значению IAsyncAction напрямую. Это связано с тем, что вы почти всегда используете синтаксис ожидания для конкретного языка. В этом случае явное возвращаемое значение метода равно void. Дополнительные сведения см. в статье Асинхронное программирование или одно из руководств по среда выполнения Windows асинхронного программирования (вызов асинхронных API в C# или Visual Basic, C++, JavaScript).
IAsyncActionWithProgress TProgress<> не используется напрямую, даже если вы не используете синтаксис ожидания для конкретного языка. Каждый из языков имеет точки расширения, которые, как правило, проще использовать, чем интерфейс среда выполнения Windows. JavaScript содержит winJS.Promise и синтаксис then/done с синтаксисом onProgress . В .NET есть методы расширения AsTask, и после преобразования IAsyncActionWithProgress TProgress<> в задачу будет проще отменить, получить уведомление о завершении, использовать IProgress<T> и т. д. Для C++/CX вызовы можно упаковать с помощью среды выполнения с параллелизмом (и использовать create_task). Другими словами, IAsyncActionWithProgress TProgress<> можно считать инфраструктурой уровня среды выполнения, которую каждый из языков использует в качестве платформы для поддержки ожидающего синтаксиса или асинхронных моделей программирования по-своему.
В частности, если вы хотите обрабатывать ход выполнения в коде .NET, используйте сигнатуру AsTask , которая в использовании расширения имеет один ссылочный параметр IProgress . (В этом случае единица выполнения уже ограничена и соответствует используемому методу IAsyncActionWithProgress.) Укажите объект, реализующий IProgress, и реализация метода Report вызывается каждый раз, когда метод среда выполнения Windows сообщает уведомление о ходе выполнения.
Чтобы отслеживать ход выполнения действия (если не используются описанные выше методы для конкретного языка), задайте свойство Progress, указав ему имя метода, реализующего делегат TProgressHandler AsyncActionProgressHandler<.>
Функции расширения C++/WinRT
Примечание
Функции расширения существуют в типах проекций C++/WinRT для определенных API среда выполнения Windows. Например, winrt::Windows::Foundation::IAsyncAction — это тип проекции C++/WinRT для IAsyncAction. Функции расширения не являются частью поверхности двоичного интерфейса приложения (ABI) фактических типов среда выполнения Windows, поэтому они не перечислены как члены API среда выполнения Windows. Но их можно вызывать из любого проекта C++/WinRT. См. статью Функции C++/WinRT, расширяющие среда выполнения Windows API.
void get() const;
Синхронно ожидает завершения действия. Вызывает соответствующее исключение, если действие отменено или переходит в состояние ошибки. Вы не должны называть его из однопотоковой квартиры. Дополнительные сведения и примеры кода, демонстрирующие вызов get, см. в статье Создание сопрограммы.
AsyncStatus wait_for(TimeSpan const& timeout) const;
Синхронно ожидает завершения действия или указанного времени ожидания. Возвращает состояние IAsyncActionWithProgress или AsyncStatus::Started , если истекло время ожидания. Если время ожидания действия не истекло, вызовите Метод GetResults , чтобы получить результаты действия. Дополнительные сведения и примеры кода, демонстрирующие вызов wait_for, см. в статье Простое асинхронное время ожидания.
Наследование интерфейса
IAsyncActionWithProgress<TProgress> наследует IAsyncInfo. Типы, реализующие IAsyncActionWithProgress TProgress<>, также реализуют элементы интерфейса IAsyncInfo:
- Метод Cancel
- Метод Close
- Свойство ErrorCode
- Свойство Id
- Свойство Status
Примечания для разработчиков
Как и в случае с вызовом существующих методов, существуют зависящие от языка способы определения асинхронных методов, которые не используют IAsyncActionWithProgress<TProgress> напрямую. При написании кода с помощью .NET метод может вернуть задачу. Для C++/CX можно использовать среду выполнения с параллелизмом. Однако если вы определяете компонент, вы можете использоватьзадачу"Задача/" для внутренних целей, но необходимо вернуть один из интерфейсов среда выполнения Windows для открытых методов. Асинхронные типы поддержки для конкретного языка (и многие другие типы, которые можно использовать в коде) не могут использоваться для общедоступной контактной зоны компонента среда выполнения Windows.
Свойства
Completed |
Возвращает или задает делегат, который вызывается при завершении действия. |
ErrorCode |
Возвращает строку, описывающую условие ошибки асинхронной операции. (Унаследовано от IAsyncInfo) |
Id |
Возвращает дескриптор асинхронной операции. (Унаследовано от IAsyncInfo) |
Progress |
Возвращает или задает метод обратного вызова, получающий уведомление о ходе выполнения. |
Status |
Возвращает значение, указывающее состояние асинхронной операции. (Унаследовано от IAsyncInfo) |
Методы
Cancel() |
Отменяет асинхронную операцию. (Унаследовано от IAsyncInfo) |
Close() |
Закрывает асинхронную операцию. (Унаследовано от IAsyncInfo) |
GetResults() |
Возвращает результаты действия. |