【问题标题】:Effectively Ending Storyboards via XAML通过 XAML 有效地结束情节提要
【发布时间】:2014-02-14 08:24:57
【问题描述】:

最近在一些情节提要上遇到了EventTrigger 上的RepeatBehavior="Forever" 内存泄漏,虽然我知道如何解决它,但我想知道是否有任何其他快速简便的事情可以帮助避免情节提要未来类型泄漏?比如只是附加一个完整的处理程序或其他东西以确保一切都得到正确处理?

我知道这是一个悬而未决的问题,但希望改进流程向前推进(对于任何支持情节提要 SL/WPF 等的东西),希望只使用 xaml,所以我不会为每个实例翻转不同的地方并且可以在我自己在故事板中工作时做到这一点。

【问题讨论】:

    标签: wpf silverlight xaml memory-leaks storyboard


    【解决方案1】:

    在 XAML 中停止 Storyboard 的最简单方法是使用 StopStoryboard class... 与 BeginStoryboard 元素相反。还有其他 xxxStoryboard 类...来自 MSDN 上的链接页面:

      <StackPanel.Triggers>
    
        <!-- Begin the Storyboard -->
        <EventTrigger RoutedEvent="Button.Click" SourceName="BeginButton">
          <BeginStoryboard Name="MyBeginStoryboard">
            <Storyboard >
              <DoubleAnimation 
                Storyboard.TargetName="myRectangle" 
                Storyboard.TargetProperty="Width" 
                Duration="0:0:5" From="100" To="500" />
            </Storyboard>
          </BeginStoryboard>
        </EventTrigger>
    
        <!-- Pause the Storyboard -->
        <EventTrigger RoutedEvent="Button.Click" SourceName="PauseButton">
          <PauseStoryboard BeginStoryboardName="MyBeginStoryboard" />
        </EventTrigger>
    
        <!-- Resume the Storyboard -->
        <EventTrigger RoutedEvent="Button.Click" SourceName="ResumeButton">
          <ResumeStoryboard BeginStoryboardName="MyBeginStoryboard" />
        </EventTrigger>
    
         <!-- Seek one second into the storyboard's active period. -->
         <EventTrigger RoutedEvent="Button.Click" SourceName="SeekButton">
           <SeekStoryboard 
            BeginStoryboardName="MyBeginStoryboard" 
            Offset="0:0:1" Origin="BeginTime" />
        </EventTrigger>   
    
        <!-- Skip to Fill -->
        <EventTrigger RoutedEvent="Button.Click" SourceName="SkipToFillButton">
          <SkipStoryboardToFill BeginStoryboardName="MyBeginStoryboard" />
        </EventTrigger>
    
        <!-- Stop the Storyboard -->
        <EventTrigger RoutedEvent="Button.Click" SourceName="StopButton">
          <StopStoryboard BeginStoryboardName="MyBeginStoryboard" />
        </EventTrigger>
    

    【讨论】:

    • 看到这就是我想我遇到了 StopStoryboard 操作的不确定性的地方,它是否处理了进程和对象,所以与故事板有关的所有内容在完成时都内存不足?并且可以将它内联到情节提要中以便情节提要运行,并在之后立即调用停止以确保它确实是“停止”和处置?
    • PS - 如果它有助于我目前正在做的修复我目前发现的崩溃(应该更快地获得一个好的内存分析器)正在移动 statemanager 中的所有内容并放弃任何递归,如无休止的重复.
    • 所以查看(页面的链接)[msdn.microsoft.com/en-us/library/ms744905(v=vs.110).aspx]你复制了这个例子,它没有解决'RepeatBehavior =“Forever”'和@987654328关联的内存泄漏@ 所以我想知道这是否是它发现的唯一情况,或者我是否可以从字面上将其从 Forever 限制为 RepeatBehavior="50x" 并且它以相同的方式清理泄漏,同时仍然保持 EventTriggers 和 ControlStoryBoardAction 调用到位?嗯。
    • 抱歉,我对您问题的内存泄漏部分无能为力。
    猜你喜欢
    • 2016-11-16
    • 1970-01-01
    • 2016-08-09
    • 2014-02-07
    • 1970-01-01
    • 2018-09-29
    • 2010-12-11
    • 2012-12-05
    • 2015-04-20
    相关资源
    最近更新 更多