2014-01-23 137 views
1

最近碰到RepeatBehavior="Forever"EventTrigger内存泄漏的一些故事板,虽然我知道如何解决它,但我想知道是否有任何其他快速和容易的事情,我可以做,以帮助避免故事板类型泄漏在未来?比如只需附加一个完整的处理程序或其他东西以确保所有东西都能正确处理?通过XAML有效结束故事板

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

回答

2

在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> 
+0

见这就是我想我也陷入了StopStoryboard运行的不确定性,对不对处置进程和对象等应有尽有关于故事板完成后内存不足?它是否可以内嵌到故事板中,以便故事板能够运行,然后立即调用停止,以确保它确实处于“停止”状态并被丢弃? –

+0

PS - 如果它有助于我目前正在做的工作来修复我目前发现的崩溃(应该已经获得了一个很好的内存分析器),它正在将所有内容移动到statemanager中,并像无尽的重复一样放弃任何递归。 –

+1

因此,查看(该页面的链接)[http://msdn.microsoft.com/en-us/library/ms744905(v = vs.110).aspx] ya复制该示例,它没有解决从'RepeatBehavior ='Forever''和'EventTrigger'的关联中,内存泄漏,所以我想知道这是它发现的唯一情况,还是我可以从字面上将它从Forever限制为像'RepeatBehavior =“50x” '并且它仍然保持EventTriggers和ControlStoryBoardAction调用到位时以相同方式清理泄漏?嗯。 –