zoukankan      html  css  js  c++  java
  • windows phone:动画(三)

    UI线程与渲染线程

    大部分Silverlight的应用程序运行在一个线程中,这个线程就是UI线程(使用的是CPU)。UI线程处理触摸输入、布局和CompositionTarget.Rendering事件。

    而有些动画则运行在一个使用GPU(即图形处理单元)的线程上,这个线程称为渲染线程。这个渲染线程为一些double类型的属性制作动画,特别是下面这些double类型的属性:

    设置到RenderTransform属性的变形;

    设置到Projection属性的透视变形;

    Canvas.Left和Canvas.To附加属性;

    Opacity属性;

    任何导致矩形发生裁切的元素;

    而通过Color和Point类型的属性制作的动画仍然在UI线程中运行。

    下面示例演示了UI线程与渲染线程:

    xaml文件片段如下所示:

        <phone:PhoneApplicationPage.Resources>
            <Storyboard x:Name="storyboard">
                <DoubleAnimation Storyboard.TargetName="rotate2"
                                 Storyboard.TargetProperty="Angle"
                                 From="0" To="360" Duration="0:1:0"
                                 RepeatBehavior="Forever" />
            </Storyboard>
        </phone:PhoneApplicationPage.Resources>

        ...

         <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
                <Grid.RowDefinitions>
                    <RowDefinition Height="*" />
                    <RowDefinition Height="*" />
                    <RowDefinition Height="Auto" />
                </Grid.RowDefinitions>

                <TextBlock Grid.Row="0"
                           Text="UI Thread"
                           FontSize="{StaticResource PhoneFontSizeLarge}"
                           HorizontalAlignment="Center"
                           VerticalAlignment="Center"
                           RenderTransformOrigin="0.5 0.5">
                    <TextBlock.RenderTransform>
                        <RotateTransform x:Name="rotate1" />
                    </TextBlock.RenderTransform>
                </TextBlock>

                <TextBlock Grid.Row="1"
                           Text="Render Thread"
                           FontSize="{StaticResource PhoneFontSizeLarge}"
                           HorizontalAlignment="Center"
                           VerticalAlignment="Center"
                           RenderTransformOrigin="0.5 0.5">
                    <TextBlock.RenderTransform>
                        <RotateTransform x:Name="rotate2" />
                    </TextBlock.RenderTransform>
                </TextBlock>

                <Button Grid.Row="2"
                        Content="Hang for 5 seconds"
                        HorizontalAlignment="Center"
                        Click="OnButtonClick" />
            </Grid>

    代码文件片段如下:

        public partial class Page1 : PhoneApplicationPage
        {
            public Page1()
            {
                InitializeComponent();
                storyboard.Begin();
                startTime = DateTime.Now;
                CompositionTarget.Rendering += OnCompositionTargetRendering;
            }
            DateTime startTime;

            void OnCompositionTargetRendering(object sender, EventArgs args)
            {
                TimeSpan elapsedTime = DateTime.Now - startTime;
                rotate1.Angle = (elapsedTime.TotalMinutes * 360) % 360;
            }

            void OnButtonClick(object sender, RoutedEventArgs args)
            {
                Thread.Sleep(5000);
            }
        }

    运行程序后,两个文本几乎一致旋转,但当你按下按钮时就会发现:使用CompositionTarget.Rendering来旋转的文本停止了5秒,但是使用DoubleAnimation旋转的文本一直在运行。为什么呢?这是因为使用DoubleAnimation旋转的动画是运行在渲染线程中的,而Thread.Sleep()停止的是当前线程,这里即UI线程。

  • 相关阅读:
    docker中安装python3.8
    deeplearning系列(四)主成分分析与白化
    Aspect# 应用实例
    招兼职程序员(仅限北京)
    今天开始学Pattern Recognition and Machine Learning (PRML)书,章节1.2,Probability Theory 概率论(上)
    今天开始学Pattern Recognition and Machine Learning (PRML),章节1.2,Probability Theory (下)
    今天开始学Pattern Recognition and Machine Learning (PRML),章节1.1,介绍与多项式曲线拟合(Polynomial Curve Fitting)
    机器学习降维算法四:Laplacian Eigenmaps 拉普拉斯特征映射
    今天开始学Pattern Recognition and Machine Learning (PRML),章节1.6,Information Theory信息论简介
    Linux系统安装shapely报错:OSError: Could not find library geos_c or load any of its variants ['libgeos_c.so.1', 'libgeos_c.so']解决办法
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/2980735.html
Copyright © 2011-2022 走看看