WPF - Ожидать анимацию в отдельном потоке? - PullRequest
0 голосов
/ 19 декабря 2009

(Примечание: я видел этот вопрос, и он использует курсор, а не анимацию.)

У меня есть анимация ожидания (которую я не сделал, но нашел в интернете). Я хочу показать это, пока мое приложение выполняет некоторую обработку.

Тем не менее, он застревает во время обработки моего приложения. Есть ли способ заставить его идти гладко? Я обычно думаю об этой теме, но есть несколько проблем с этим.

  1. Понятия не имею, как запустить поток в XAML
  2. Я обычно достаточно разбираюсь в потоках, чтобы просто запутаться.
  3. Я сделал очень мало кода в .NET

Кто-нибудь может мне помочь? Вот 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>

Для тех, кому нужен пример кода, я планирую поместить его в событие OnClick кнопки «Ссылка», найденной в проекте CodePlex .

1 Ответ

1 голос
/ 19 декабря 2009

Лучше всего использовать BackgroundWorker. Он будет выполнять маршалинг для правильной ветки от вашего имени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...