WPF - 在单独的线程上等待动画?

时间:2009-12-19 16:11:01

标签: wpf multithreading animation

(注意:我看到this问题,它使用的是光标而不是动画。)

我有一个等待动画(我没有制作,但在互联网上找到)。我想在我的应用程序进行一些处理时显示它。

然而,当我的应用处理时,它会卡住。有没有办法让它保持顺畅?我通常会想到一个线程,但是有一些问题。

  1. 我不知道如何在XAML中启动线程
  2. 我通常对线程非常了解,只是让自己严重搞砸了。
  3. 我在.NET中完成了很少的线程代码
  4. 任何人都可以帮助我吗?以下是创建等待动画的XAML:

    <Page
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
      <Grid>  
      <Viewbox Name="WaitCursor" >
      <Canvas Width="80" Height="80" Name="canvas">
       <Canvas.RenderTransform>
        <RotateTransform Angle="0" CenterX="40" CenterY="40" /> 
       </Canvas.RenderTransform>
       <Canvas.Triggers>
    
        <EventTrigger RoutedEvent="FrameworkElement.Loaded">
         <EventTrigger.Actions>
          <BeginStoryboard>
           <Storyboard>
            <DoubleAnimation Storyboard.TargetName="canvas" 
                  Storyboard.TargetProperty="(Canvas.RenderTransform).(RotateTransform.Angle)" 
                  To="360" 
                  Duration="0:0:0.7" 
                  RepeatBehavior="Forever" />
           </Storyboard>
    
          </BeginStoryboard>
         </EventTrigger.Actions>
        </EventTrigger>
       </Canvas.Triggers>
       <Ellipse Canvas.Top="0" Canvas.Left="30" Width="20" Height="20" >
         <Ellipse.Fill>
            <SolidColorBrush>
              <SolidColorBrush.Color>
                <Color A="10" R="0" G="0" B="255" />
              </SolidColorBrush.Color>
            </SolidColorBrush>
         </Ellipse.Fill>
       </Ellipse>
       <Ellipse Canvas.Top="10" Canvas.Left="50" Width="20" Height="20" Fill="#15000000"/>
    
       <Ellipse Canvas.Top="30" Canvas.Left="60" Width="20" Height="20" Fill="#38000000"/>
       <Ellipse Canvas.Top="50" Canvas.Left="50" Width="20" Height="20" Fill="#55000000"/>
       <Ellipse Canvas.Top="60" Canvas.Left="30" Width="20" Height="20" Fill="#88000000"/>
       <Ellipse Canvas.Top="50" Canvas.Left="10" Width="20" Height="20" Fill="#aa000000"/>
       <Ellipse Canvas.Top="30" Canvas.Left="0" Width="20" Height="20" Fill="#cc000000"/>
       <Ellipse Canvas.Top="10" Canvas.Left="10" Width="20" Height="20" Fill="#ff000000"/>
    
      </Canvas>
     </Viewbox>
      </Grid>
    </Page>
    

    对于那些需要实际代码示例的人,我打算将其放在此CodePlex Project中找到的“链接”按钮的OnClick事件中。

1 个答案:

答案 0 :(得分:1)

最好的办法是使用BackgroundWorker。它将代表您完成编组到正确的线程的工作。