CompositionScopedBatch Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Явно созданная группа активных анимаций или эффектов.
public ref class CompositionScopedBatch sealed : CompositionObject
/// [Windows.Foundation.Metadata.ContractVersion(Microsoft.Foundation.LiftedContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class CompositionScopedBatch final : CompositionObject
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
/// [Windows.Foundation.Metadata.ContractVersion(Microsoft.Foundation.WindowsAppSDKContract, 65536)]
class CompositionScopedBatch final : CompositionObject
[Windows.Foundation.Metadata.ContractVersion(typeof(Microsoft.Foundation.LiftedContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class CompositionScopedBatch : CompositionObject
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
[Windows.Foundation.Metadata.ContractVersion(typeof(Microsoft.Foundation.WindowsAppSDKContract), 65536)]
public sealed class CompositionScopedBatch : CompositionObject
Public NotInheritable Class CompositionScopedBatch
Inherits CompositionObject
- Наследование
- Атрибуты
Примеры
Пакет с областью действия
// The Green Square's completion events for the Offset and Opacity animations are aggregated
// The Rotation animation completion event is not aggregated
// When the aggregated events are completed OnBatchCompleted method is executed
public void BatchAnimations()
{
// Create a Scoped batch to capture animation completion events
_batch = _compositor.CreateScopedBatch(CompositionBatchTypes.Animation);
// Executing the Offset animation and aggregating completion event
ApplyOffsetAnimation(_greenSquare);
// Suspending to exclude the following Rotation animation from the batch
_batch.Suspend();
// Executing the Rotation animation
ApplyRotationAnimation(_greenSquare);
// Resuming the batch to collect additional animations
_batch.Resume();
// Executing the Opacity animation and aggregating completion event
ApplyOpacityAnimation(_greenSquare);
// Batch is ended and no objects can be added
_batch.End();
// Method triggered when batch completion event fires
_batch.Completed += OnBatchCompleted;
}
Комментарии
Представляет группу активных анимаций или эффектов и запускает обратный вызов при завершении всех членов группы. Объект CompositionScopedBatch создается явным образом и используется для назначения определенных объектов для включения в один пакет с областью действия.
Можно создать несколько экземпляров CompositionScopedBatch, а объекты можно агрегировать в нескольких пакетах одновременно.
Create
Чтобы агрегировать определенную группу анимаций или нацелить событие завершения одной анимации, создайте пакет с областью действия. Пакет с областью действия создается явным образом с помощью Compositor.CreateScopedBatch и используется для назначения определенных объектов для включения в один пакет. Пакет с областью действия можно создать в любом потоке и не привязан к потоку композиции. Пакеты с областью действия будут агрегировать только объекты в потоке, который он создается.
CompositionScopedBatch myScopedBatch = _compositor.CreateScopedBatch(CompositionBatchTypes.Animation);
Приостановка и возобновление работы
После создания ограниченного пакета все запущенные анимации агрегируются, пока пакет не будет явно приостановлен или завершен с помощью функции "Приостановка" или "Конец".
CompositionScopedBatch может быть явно приостановлен с помощью Suspend , чтобы исключить объекты из этого пакета. При приостановке пакета его можно повторно открыть, вызвав возобновление работы. Вызов функции Приостановки останавливает агрегирование состояний завершения анимации до вызова Возобновления. Это позволяет явным образом исключить содержимое из заданного пакета.
В приведенном ниже примере анимация, предназначенная для свойства Offset VisualA, не будет включена в пакет:
myScopedBatch.Suspend();
VisualA.StartAnimation("Offset", myAnimation);
myScopeBatch.Resume();
Конец
Объект CompositionScopedBatch должен быть явно закрыт с помощью end. После закрытия его нельзя приостановить или возобновить снова. Чтобы завершить пакет, необходимо вызвать End(). Без вызова end пакет останется открытым навсегда собирая объекты.
В следующем фрагменте кода и схеме показано, как пакет будет агрегировать анимации для отслеживания конечных состояний.
Обратите внимание, что в этом примере анимации 1, 3 и 4 будут иметь конечные состояния, отслеживаемые этой пакетной службой, но анимация 2 не будет.
myScopedBatch.End();
CompositionScopedBatch myScopedBatch = _compositor.CreateScopedBatch(CompositionBatchTypes.Animation);
// Start Animation1
[…]
myScopedBatch.Suspend();
// Start Animation2
[…]
myScopedBatch.Resume();
// Start Animation3
[…]
// Start Animation4
[…]
myScopedBatch.End();
Пакетная обработка события завершения одной анимации
Если вы хотите знать, когда заканчивается одна анимация, необходимо создать пакет с областью действия, который будет включать только целевую анимацию.
Рассмотрим пример.
CompositionScopedBatch myScopedBatch = _compositor.CreateScopedBatch(CompositionBatchTypes.Animation);
Visual.StartAnimation("Opacity", myAnimation);
myScopedBatch.End();
Получение события завершения пакета
При пакетной обработке анимации или нескольких анимациях вы получите событие завершения пакета так же. Вы регистрируете метод обработки событий для события Completed целевого пакета.
myScopedBatch.Completed += OnBatchCompleted;
Состояния пакетной службы
Существует два свойства, которые можно использовать для определения состояния существующего пакета; IsActive и IsEnded.
Свойство IsActive возвращает значение true, если целевой пакет открыт для агрегирования анимаций. IsActive возвращает значение false при приостановке или завершении пакета.
Свойство IsEnded возвращает значение true, если не удается добавить анимацию в конкретный пакет. Пакет будет завершен при вызове явного вызова end для определенного пакета.
Свойства
| Имя | Описание |
|---|---|
| Comment |
Строка, связанная с CompositionObject. (Унаследовано от CompositionObject) |
| Compositor |
Компостор, используемый для создания этого объекта CompositionObject. (Унаследовано от CompositionObject) |
| DispatcherQueue |
Возвращает диспетчерку для CompositionObject. (Унаследовано от CompositionObject) |
| ImplicitAnimations |
Коллекция неявных анимаций, присоединенных к этому объекту. (Унаследовано от CompositionObject) |
| IsActive |
Указывает, открыт ли объект CompositionScopedBatch для агрегирования объектов. |
| IsEnded |
Указывает, закрыт ли объект CompositionScopedBatch и больше не может принимать изменения. |
| Properties |
Коллекция свойств, связанных с CompositionObject. (Унаследовано от CompositionObject) |
Методы
| Имя | Описание |
|---|---|
| Close() |
Закрывает ресурсы системы CompositionObject и освобождает системные ресурсы. (Унаследовано от CompositionObject) |
| Dispose() |
Выполняет определяемые приложением задачи, связанные с освобождением, освобождением или сбросом неуправляемых ресурсов. (Унаследовано от CompositionObject) |
| End() |
Закрывает CompositionScopedBatch. После закрытия CompositionScopedBatch его нельзя приостановить или возобновить снова. |
| PopulatePropertyInfo(String, AnimationPropertyInfo) |
Определяет свойство, которое может быть анимировано. (Унаследовано от CompositionObject) |
| Resume() |
Возобновляет агрегирование объектов в CompositionScopedBatch. |
| StartAnimation(String, CompositionAnimation, AnimationController) |
Подключает анимацию с указанным свойством объекта и запускает анимацию. (Унаследовано от CompositionObject) |
| StartAnimation(String, CompositionAnimation) |
Подключает анимацию с указанным свойством объекта и запускает анимацию. (Унаследовано от CompositionObject) |
| StartAnimationGroup(ICompositionAnimationBase) |
Запускает группу анимации. Метод StartAnimationGroup в CompositionObject позволяет запустить CompositionAnimationGroup. Все анимации в группе будут запущены одновременно в объекте. (Унаследовано от CompositionObject) |
| StopAnimation(String) |
Отключает анимацию от указанного свойства и останавливает анимацию. (Унаследовано от CompositionObject) |
| StopAnimationGroup(ICompositionAnimationBase) |
Останавливает группу анимации. (Унаследовано от CompositionObject) |
| Suspend() |
Приостанавливает агрегирование объектов в CompositionScopedBatch. |
| TryGetAnimationController(String) |
Возвращает AnimationController для анимации, выполняемой в указанном свойстве. (Унаследовано от CompositionObject) |
События
| Имя | Описание |
|---|---|
| Completed |
Событие, активированное после завершения всех анимаций и эффектов в CompositionScopedBatch . |