Freigeben über


IUIAnimationPriorityComparison::HasPriority-Methode (uianimation.h)

Bestimmt, ob ein neues Storyboard Vorrang vor einem geplanten Storyboard hat.

Syntax

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

Parameter

[in] scheduledStoryboard

Das derzeit geplante Storyboard.

[in] newStoryboard

Das neue Storyboard, das das in scheduledStoryboard angegebene geplante Storyboard unterbricht.

[in] priorityEffect

Die potenzielle Auswirkung auf newStoryboard , wenn scheduledStoryboard eine höhere Priorität hat.

Rückgabewert

Diese Methode kann einen dieser Werte zurückgeben.

Rückgabecode BESCHREIBUNG
S_OK
newStoryboard hat Priorität.
S_FALSE
scheduledStoryboard hat Priorität.

Hinweise

Eine einzelne Animationsvariable kann in mehrere Storyboards eingeschlossen werden, aber mehrere Storyboards können nicht dieselbe Variable gleichzeitig animieren.

Wenn ein neues Storyboard versucht, eine oder mehrere Variablen zu animieren, die derzeit für die Animation durch ein anderes Storyboard geplant sind, tritt ein Terminplanungskonflikt auf.

Um zu bestimmen, welches Storyboard Priorität hat, kann der Animations-Manager HasPriority für einen oder mehrere von der Anwendung bereitgestellte Prioritätsvergleichshandler aufrufen.

Das Registrieren von Prioritätsvergleichsobjekten ist optional. Standardmäßig können alle Storyboards gekürzt, abgeschlossen oder komprimiert werden, um Fehler zu verhindern, aber keines kann abgebrochen werden, und standardmäßig werden keine Storyboards abgebrochen oder gekürzt, um eine Verzögerung zu verhindern.

Standardmäßig führt ein Aufruf, der in einer Rückrufmethode an eine andere Animationsmethode erfolgt, dazu, dass der Aufruf fehlschlägt und UI_E_ILLEGAL_REENTRANCY zurückgibt. Es gibt jedoch Ausnahmen von dieser Standardeinstellung. Die folgenden Methoden können erfolgreich von HasPriority aufgerufen werden:

Konfliktverwaltung

Um einen Terminplanungskonflikt zu beheben, verfügt der Animations-Manager über die folgenden Optionen:

  • Brechen Sie das geplante Storyboard ab, wenn es nicht mit der Wiedergabe begonnen hat, und das bei IUIAnimationManager::SetCancelPriorityComparison registrierte Prioritätsvergleichsobjekt S_OK zurückgibt. Abgebrochene Storyboards werden vollständig aus dem Zeitplan entfernt.
  • Kürzen Sie das geplante Storyboard, wenn das bei IUIAnimationManager::SetTrimPriorityComparison registrierte Prioritätsvergleichsobjekt S_OK zurückgibt. Wenn das neue Storyboard das geplante Storyboard schneidet, kann sich das geplante Storyboard nicht mehr auf eine Variable auswirken, wenn das neue Storyboard beginnt, diese Variable zu animieren.
  • Schließen Sie das geplante Storyboard ab, wenn das geplante Storyboard eine Schleife mit einer Wiederholungsanzahl von UI_ANIMATION_REPEAT_INDEFINITELY enthält und das mit IUIAnimationManager::SetConcludePriorityComparison registrierte Prioritätsvergleichsobjekt S_OK zurückgibt. Wenn das Storyboard abgeschlossen ist, wird die aktuelle Wiederholung der Schleife abgeschlossen, und die Erinnerung des Storyboards wird dann wiedergegeben.
  • Komprimieren Sie das geplante Storyboard und alle anderen Storyboards, die dieselben Variablen animieren, wenn das bei IUIAnimationManager::SetCompressPriorityComparison registrierte Prioritätsvergleichsobjekt S_OK für alle geplanten Storyboards zurückgibt, die von der Komprimierung betroffen sein könnten. Wenn die Storyboards komprimiert werden, wird die Zeit für betroffene Storyboards vorübergehend beschleunigt, sodass sie schneller wiedergegeben werden.

Wenn keine der oben genannten Optionen von den Prioritätsvergleichsobjekten zugelassen wird, schlägt der Versuch, das Storyboard zu planen, fehl, und Windows-Animation gibt UI_ANIMATION_SCHEDULING_INSUFFICIENT_PRIORITY an die aufrufende Anwendung zurück.

Beachten Sie, dass das neue Storyboard erfolgreich geplant werden kann, bevor die längste zulässige Verzögerung abgelaufen ist. Dies wird durch IUIAnimationStoryboard::SetLongestAcceptableDelay oder IUIAnimationManager::SetDefaultLongestAcceptableDelay bestimmt (wenn keiner aufgerufen wird, ist der Standardwert 0,0 Sekunden). Wenn die längste zulässige Verzögerung UI_ANIMATION_SECONDS_EVENTUALLY ist, ist jede endliche Verzögerung ausreichend.

Der Parameter priorityEffect beschreibt die möglichen Auswirkungen auf das neue Storyboard, wenn HasPriority S_FALSE zurückgeben würde. Wenn priorityEffectUI_ANIMATION_PRIORITY_EFFECT_FAILURE ist, ist es möglich, dass die Rückgabe von S_FALSE zu einem Fehler beim Planen des neuen Storyboards führt (es ist auch möglich, dass der Animations-Manager den Konflikt durch ein anderes Prioritätsvergleichsobjekt anders lösen kann). Wenn priorityEffectUI_ANIMATION_PRIORITY_EFFECT_DELAY ist, besteht der einzige Nachteil der Rückgabe von S_FALSE darin, dass das Storyboard möglicherweise später beginnt, als HasPriority S_OK zurückgegeben hätte.

Wenn UI_ANIMATION_PRIORITY_EFFECT_DELAY an HasPriority übergeben wird, hat der Animations-Manager bereits festgestellt, dass er das neue Storyboard so planen kann, dass es beginnt, bevor die längste akzeptable Verzögerung abgelaufen ist. Er fragt jedoch die Anwendung, ob das Storyboard noch früher beginnen soll. In einigen Szenarien kann es am besten sein, die Latenz einer Animation zu verringern, indem S_OK zurückgegeben wird. In anderen Fällen ist es möglicherweise besser, geplante Animationen nach Möglichkeit abschließen zu lassen. In diesem Fall sollten S_FALSE zurückgegeben werden. UI_ANIMATION_PRIORITY_EFFECT_DELAY wird nur dann an HasPriority übergeben, wenn der Animations-Manager erwägt, ein Storyboard abzubrechen oder zu kürzen.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 7, Windows Vista und Platform Update für Windows Vista [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Nicht unterstützt
Zielplattform Windows
Kopfzeile uianimation.h
DLL UIAnimation.dll

Weitere Informationen

IUIAnimationManager::SetCancelPriorityComparison

IUIAnimationManager::SetCompressPriorityComparison

IUIAnimationManager::SetConcludePriorityComparison

IUIAnimationManager::SetTrimPriorityComparison

IUIAnimationPriorityComparison

UI_ANIMATION_PRIORITY_EFFECT