CompositionScopedBatch 类

定义

显式创建的一组活动动画或效果。

public ref class CompositionScopedBatch sealed : CompositionObject
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 131072)]
/// [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.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 131072)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class CompositionScopedBatch : CompositionObject
Public NotInheritable Class CompositionScopedBatch
Inherits CompositionObject
继承
Object Platform::Object IInspectable CompositionObject CompositionScopedBatch
属性

Windows 要求

设备系列
Windows 10 (在 10.0.10586.0 中引入)
API contract
Windows.Foundation.UniversalApiContract (在 v2.0 中引入)

示例

作用域内批处理

// 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 实例,并且可以同时在多个批处理中聚合对象。

创建

若要聚合特定动画组或以单个动画的完成事件为目标,请创建一个限定范围的批处理。 作用域内批处理是使用 Compositor.CreateScopedBatch 显式创建的,用于指定要包含在单个批处理中的特定对象。 可以在任何线程上创建作用域内批处理,并且不绑定到组合线程。 作用域内的批处理将仅聚合所创建的线程中的对象。

CompositionScopedBatch myScopedBatch = _compositor.CreateScopedBatch(CompositionBatchTypes.Animation);

暂停和恢复

创建限定范围的批处理后,所有启动的动画都会聚合,直到使用 Suspend 或 End 函数显式挂起或结束批处理为止。

CompositionScopedBatch 可以使用 Suspend 显式暂停,以便从该批中排除对象。 当批处理暂停时,可以通过调用 Resume 重新打开它。 调用 Suspend 函数会停止聚合动画结束状态,直到调用 Resume。 这将使你能够显式从给定批中排除内容。

在下面的示例中,定向 VisualA 的 Offset 属性的动画不会包括在批中:

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();

限定范围的批处理包含动画 1、动画 3和动画 4,而动画 2 不在限定范围的批处理中

批处理单个动画的完成事件

如果想要知道单个动画何时结束,则需要创建一个限定范围的批处理,该批将仅包含你面向的动画。

例如:

CompositionScopedBatch myScopedBatch = 	_compositor.CreateScopedBatch(CompositionBatchTypes.Animation);
Visual.StartAnimation("Opacity", myAnimation);
myScopedBatch.End();

检索批的完成事件

在批处理一个动画或多个动画时,你将按照相同方法检索批的完成事件。 为目标批处理的 Completed 事件注册事件处理方法。

myScopedBatch.Completed += OnBatchCompleted;

批状态

有两个属性可用于确定现有批处理的状态: IsActiveIsEnded

如果定向的批对聚合动画打开,IsActive 属性将返回 true。 批暂停或结束时,IsActive 将返回 false。

当你无法向该特定批添加动画时,IsEnded 属性将返回 true。 为特定批处理显式调用 End 时,将结束批处理。

属性

Comment

要与 CompositionObject 关联的字符串。

(继承自 CompositionObject)
Compositor

用于创建此 CompositionObject 的 Compositor

(继承自 CompositionObject)
Dispatcher

CompositionObject 的调度程序。

(继承自 CompositionObject)
DispatcherQueue

获取 CompostionObject 的 DispatcherQueue

(继承自 CompositionObject)
ImplicitAnimations

附加到此对象的隐式动画集合。

(继承自 CompositionObject)
IsActive

指示当前是否为要聚合的对象打开 CompositionScopedBatch

IsEnded

指示 CompositionScopedBatch 是否已关闭,并且无法再接受更改。

Properties

CompositionObject 关联的属性的集合。

(继承自 CompositionObject)

方法

Close()

关闭 CompositionObject 并释放系统资源。

(继承自 CompositionObject)
ConnectAnimation(String, CompositionAnimation)

连接和动画。

(继承自 CompositionObject)
DisconnectAnimation(String)

断开动画的连接。

(继承自 CompositionObject)
Dispose()

执行与释放或重置非托管资源关联的应用程序定义的任务。

(继承自 CompositionObject)
End()

关闭 CompositionScopedBatchCompositionScopedBatch 关闭后,无法将其暂停或再次恢复。

PopulatePropertyInfo(String, AnimationPropertyInfo)

定义可进行动画处理的属性。

(继承自 CompositionObject)
Resume()

继续聚合 CompositionScopedBatch 中的对象。

StartAnimation(String, CompositionAnimation)

使用 对象的指定属性连接动画并启动动画。

(继承自 CompositionObject)
StartAnimation(String, CompositionAnimation, AnimationController)

使用 对象的指定属性连接动画并启动动画。

(继承自 CompositionObject)
StartAnimationGroup(ICompositionAnimationBase)

启动动画组。

CompositionObject 上的 StartAnimationGroup 方法可用于启动 CompositionAnimationGroup。 组中的所有动画将同时在 对象上启动。

(继承自 CompositionObject)
StopAnimation(String)

断开动画与指定属性的连接并停止动画。

(继承自 CompositionObject)
StopAnimationGroup(ICompositionAnimationBase)

停止动画组。

(继承自 CompositionObject)
Suspend()

挂起 CompositionScopedBatch 中的聚合对象。

TryGetAnimationController(String)

返回指定属性上运行的动画的 AnimationController。

(继承自 CompositionObject)

事件

Completed

在 CompositionScopedBatch 中的所有动画和效果完成后触发的事件。

适用于

另请参阅