IUIAnimationPriorityComparison2::HasPriority 方法 (uianimation.h)

确定计划情节提要与新情节提要之间的相对优先级。

语法

HRESULT HasPriority(
  [in] IUIAnimationStoryboard2      *scheduledStoryboard,
  [in] IUIAnimationStoryboard2      *newStoryboard,
  [in] UI_ANIMATION_PRIORITY_EFFECT priorityEffect
);

参数

[in] scheduledStoryboard

当前计划的情节提要。

[in] newStoryboard

正在中断 scheduledStoryboard 指定的计划情节提要的新情节提要。

[in] priorityEffect

如果 scheduledStoryboard 具有更高的优先级,则对 newStoryboard 的潜在影响。

返回值

如果成功,则返回以下内容:否则为 HRESULT 错误代码。 有关错误代码列表,请参阅 Windows 动画 错误代码。

返回代码 说明
S_OK
newStoryboard 具有优先级。
S_FALSE
scheduledStoryboard 具有优先级。

注解

单个动画变量可以包含在多个情节提要中,但多个情节提要无法同时对同一变量进行动画处理。

如果新的情节提要尝试对当前由其他情节提要安排动画的一个或多个变量进行动画处理,则会发生计划冲突。

若要确定哪个情节提要具有优先级,动画管理器可以在应用程序提供的一个或多个优先级比较处理程序上调用 HasPriority 方法。

注册优先级比较对象是可选的。 默认情况下,可以剪裁、结束或压缩所有情节提要以防止失败,但不能取消任何情节提要,默认情况下,不会取消或剪裁情节提要以防止延迟。

默认情况下,在回调方法中对任何其他动画方法的调用会导致调用失败并返回 UI_E_ILLEGAL_REENTRANCY。 但是,此默认值存在例外情况。 可以从 HasPriority 成功调用以下方法:

争用管理

若要解决计划冲突,动画管理器具有以下选项:

  • 如果计划情节提要尚未开始播放,则取消该情节提要,并且使用 IUIAnimationManager2::SetCancelPriorityComparison 注册的优先级比较对象 将返回S_OK。 已取消的情节提要将从计划中完全删除。
  • 如果向 IUIAnimationManager2::SetTrimPriorityComparison 注册的优先级比较对象返回 S_OK,请剪裁计划的情节提要。 如果新的情节提要剪裁计划的情节提要,则当新情节提要开始对该变量进行动画处理时,计划的情节提要将不再影响变量。
  • 如果计划的情节提要包含重复计数为 UI_ANIMATION_REPEAT_INDEFINITELY 的循环,并且向 IUIAnimationManager2::SetConcludePriorityComparison 注册的优先级比较对象返回S_OK,则结束 计划的情节提要。 如果情节提要结束,则完成循环的当前重复,然后播放情节提要的提醒。
  • 如果向 IUIAnimationManager2::SetCompressPriorityComparison 注册的优先级比较对象返回可能受压缩影响的所有计划情节提要 的S_OK ,则压缩计划情节提要和任何其他动画处理相同变量的情节提要。 压缩情节提要时,受影响的情节提要的时间会暂时加快,因此它们播放速度更快。

如果优先级比较对象不允许上述选项,则计划情节提要的尝试会失败,Windows 动画会将 UI_ANIMATION_SCHEDULING_INSUFFICIENT_PRIORITY 返回到调用应用程序。

请注意,若要成功计划新情节提要,它必须在最长可接受的延迟过后才开始。 这由 IUIAnimationStoryboard::SetLongestAcceptableDelayIUIAnimationManager2::SetDefaultLongestAcceptableDelay ((如果两者均未调用)确定,默认值为 0.0 秒) 。 如果最长的可接受延迟 UI_ANIMATION_SECONDS_EVENTUALLY,则任何有限延迟都将足够。

priorityEffect 参数描述了如果 HasPriority 返回S_FALSE,可能对新情节提产生的影响。 如果 priorityEffectUI_ANIMATION_PRIORITY_EFFECT_FAILURE,则返回 S_FALSE 可能会导致无法计划新情节提要。 (另一个优先级比较对象可能允许动画管理器以其他方式解决冲突。) 如果 priorityEffect是UI_ANIMATION_PRIORITY_EFFECT_DELAY,则返回 S_FALSE 的唯一缺点是,情节提要的开始时间可能晚于 HasPriority返回S_OK

UI_ANIMATION_PRIORITY_EFFECT_DELAY 传递给 HasPriority 时,动画管理器已确定可以计划新情节提要在其最长可接受延迟之前开始,但实际上会询问应用程序情节提要是否应更早开始。 在某些情况下,最好通过返回 S_OK来降低动画的延迟。 在其他人中,最好尽可能让计划的动画完成,在这种情况下 ,HasPriority 应返回 S_FALSE 当动画管理器考虑取消或剪裁情节提要时,才会将UI_ANIMATION_PRIORITY_EFFECT_DELAY传递给 HasPriority

要求

要求
最低受支持的客户端 Windows 8、Windows 7 和适用于 Windows 7 的平台更新 [桌面应用 |UWP 应用]
最低受支持的服务器 无受支持的版本
目标平台 Windows
标头 uianimation.h
DLL UIAnimation.dll

另请参阅

IUIAnimationManager2::SetCancelPriorityComparison

IUIAnimationManager2::SetCompressPriorityComparison

IUIAnimationManager2::SetConcludePriorityComparison

IUIAnimationManager2::SetTrimPriorityComparison

IUIAnimationPriorityComparison2

UI_ANIMATION_PRIORITY_EFFECT