CompositionScopedBatch 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
显式创建的一组活动动画或效果。
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 实例,并且可以同时在多个批处理中聚合对象。
创建
若要聚合特定动画组或以单个动画的完成事件为目标,请创建作用域内批处理。 作用域内批处理是使用 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();
结束
必须使用 End 显式关闭 CompositionScopedBatch。 一旦关闭,它将无法暂停或再次恢复。 为了完成批操作,必须调用 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 的 Compositor。 (继承自 CompositionObject) |
DispatcherQueue |
获取 CompositionObject 的 DispatcherQueue。 (继承自 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) |
启动动画组。 使用 CompositionObject 上的 StartAnimationGroup 方法可以启动 CompositionAnimationGroup。 组中的所有动画都将在 对象上同时启动。 (继承自 CompositionObject) |
StopAnimation(String) |
断开动画与指定属性的连接,并停止动画。 (继承自 CompositionObject) |
StopAnimationGroup(ICompositionAnimationBase) |
停止动画组。 (继承自 CompositionObject) |
Suspend() |
挂起 CompositionScopedBatch 中的聚合对象。 |
TryGetAnimationController(String) |
返回指定属性上运行的动画的 AnimationController。 (继承自 CompositionObject) |
事件
Completed |
在 CompositionScopedBatch 中的所有动画和效果完成后触发的事件。 |