none
ProgressBar 的问题.... RRS feed

  • 问题

  • 在等待状态下我在界面放了个ProgressBar ,设置IsIndeterminate = true 。在silverligh2下这么用的没问题 在我的机器上运行之前的silverlight2程序 这块都没问题。但是现在我用silverliht3 我用了一个ProgressBar  把IsIndeterminate 设置为ture 后运行的时候我的Cpu能顶到90%以上....为什么啊..

    我怎么感觉silverlight3比2要耗cpu呢...


    ...
    2009年8月24日 12:43

答案

  • ProgressBar的IsIndeterminate设置为True时,它的代码是:

    <Grid x:Name="IndeterminateRoot">
        <Rectangle x:Name="IndeterminateSolidFill" Stroke="#FF448DCA" RadiusX="2" RadiusY="2" StrokeThickness="0" Margin="{TemplateBinding BorderThickness}" Fill="{TemplateBinding Foreground}" Opacity="1" RenderTransformOrigin="0.5,0.5" />
        <Rectangle x:Name="IndeterminateGradientFill" RadiusX="2" RadiusY="2" StrokeThickness="1" Margin="{TemplateBinding BorderThickness}" Opacity="0.7">
            <Rectangle.Fill>
                <LinearGradientBrush SpreadMethod="Repeat" MappingMode="Absolute" EndPoint="0,1" StartPoint="20,1">
                    <LinearGradientBrush.Transform>
                        <TransformGroup>
                            <TranslateTransform X="0" />
                            <SkewTransform AngleX="-30" />
                        </TransformGroup>
                    </LinearGradientBrush.Transform>
                    <GradientStop Color="#FFFFFFFF" Offset="0" />
                    <GradientStop Color="#00FFFFFF" Offset=".25" />
                    <GradientStop Color="#FFFFFFFF" Offset="0.85" />
                </LinearGradientBrush>
            </Rectangle.Fill>
        </Rectangle>
    </Grid>

    所执行的动画是:

    <DoubleAnimation Storyboard.TargetName="IndeterminateGradientFill" Storyboard.TargetProperty="(Shape.Fill).(LinearGradientBrush.Transform).(TransformGroup.Children)[0].X" Duration="00:00:.5" From="0" To="20"/>

    你可以分析一下这个是否与你的程序有什么冲突。是否同时执行了其它动画,另外Windowless设置为True也会导致CPU消耗增长。一般情况下是不会出下你遇到的这一问题。另外最好把你这个程序放到别的机器上试一下,看看是否有同样问题。还有一点,高CPU占有是用浏览器测试xap文件时候出现的么?还是直接在Blend里测试的,用Blend直接测试有时候会有高CPU的现象。

    2009年8月25日 5:30

全部回复

  • 既然你用了ProgressBar,说明你程序后台肯定是在运行某一过程,占用CPU的应该是这个过程。ProgressBar本身什么CPU也不用。不信你单独弄一个UserControl,什么也别放,只放一个ProgressBar,绝对不会有CPU占用90%的情况。
    2009年8月24日 14:04
  • 你好!
    不会的啊 可能其他东西在影响
    2009年8月24日 15:00
  • 既然你用了ProgressBar,说明你程序后台肯定是在运行某一过程,占用CPU的应该是这个过程。ProgressBar本身什么CPU也不用。不信你单独弄一个UserControl,什么也别放,只放一个ProgressBar,绝对不会有CPU占用90%的情况。

    可是我IsIndeterminate 这个属性不设置的话就没问题啊..
    ...
    2009年8月25日 2:05
  • 既然你用了ProgressBar,说明你程序后台肯定是在运行某一过程,占用CPU的应该是这个过程。ProgressBar本身什么CPU也不用。不信你单独弄一个UserControl,什么也别放,只放一个ProgressBar,绝对不会有CPU占用90%的情况。

    我试了也是你说的那样,但我的界面里只要一用,     Cup就顶上去了...不用的话很正常...感觉是和什么冲突着..搞不懂...
    ...
    2009年8月25日 2:32
  • ProgressBar的IsIndeterminate设置为True时,它的代码是:

    <Grid x:Name="IndeterminateRoot">
        <Rectangle x:Name="IndeterminateSolidFill" Stroke="#FF448DCA" RadiusX="2" RadiusY="2" StrokeThickness="0" Margin="{TemplateBinding BorderThickness}" Fill="{TemplateBinding Foreground}" Opacity="1" RenderTransformOrigin="0.5,0.5" />
        <Rectangle x:Name="IndeterminateGradientFill" RadiusX="2" RadiusY="2" StrokeThickness="1" Margin="{TemplateBinding BorderThickness}" Opacity="0.7">
            <Rectangle.Fill>
                <LinearGradientBrush SpreadMethod="Repeat" MappingMode="Absolute" EndPoint="0,1" StartPoint="20,1">
                    <LinearGradientBrush.Transform>
                        <TransformGroup>
                            <TranslateTransform X="0" />
                            <SkewTransform AngleX="-30" />
                        </TransformGroup>
                    </LinearGradientBrush.Transform>
                    <GradientStop Color="#FFFFFFFF" Offset="0" />
                    <GradientStop Color="#00FFFFFF" Offset=".25" />
                    <GradientStop Color="#FFFFFFFF" Offset="0.85" />
                </LinearGradientBrush>
            </Rectangle.Fill>
        </Rectangle>
    </Grid>

    所执行的动画是:

    <DoubleAnimation Storyboard.TargetName="IndeterminateGradientFill" Storyboard.TargetProperty="(Shape.Fill).(LinearGradientBrush.Transform).(TransformGroup.Children)[0].X" Duration="00:00:.5" From="0" To="20"/>

    你可以分析一下这个是否与你的程序有什么冲突。是否同时执行了其它动画,另外Windowless设置为True也会导致CPU消耗增长。一般情况下是不会出下你遇到的这一问题。另外最好把你这个程序放到别的机器上试一下,看看是否有同样问题。还有一点,高CPU占有是用浏览器测试xap文件时候出现的么?还是直接在Blend里测试的,用Blend直接测试有时候会有高CPU的现象。

    2009年8月25日 5:30
  • ProgressBar的IsIndeterminate设置为True时,它的代码是:

    <Grid x:Name="IndeterminateRoot">
    
        <Rectangle x:Name="IndeterminateSolidFill" Stroke="#FF448DCA" RadiusX="2" RadiusY="2" StrokeThickness="0" Margin="{TemplateBinding BorderThickness}" Fill="{TemplateBinding Foreground}" Opacity="1" RenderTransformOrigin="0.5,0.5" />
    
        <Rectangle x:Name="IndeterminateGradientFill" RadiusX="2" RadiusY="2" StrokeThickness="1" Margin="{TemplateBinding BorderThickness}" Opacity="0.7">
    
            <Rectangle.Fill>
    
                <LinearGradientBrush SpreadMethod="Repeat" MappingMode="Absolute" EndPoint="0,1" StartPoint="20,1">
    
                    <LinearGradientBrush.Transform>
    
                        <TransformGroup>
    
                            <TranslateTransform X="0" />
    
                            <SkewTransform AngleX="-30" />
    
                        </TransformGroup>
    
                    </LinearGradientBrush.Transform>
    
                    <GradientStop Color="#FFFFFFFF" Offset="0" />
    
                    <GradientStop Color="#00FFFFFF" Offset=".25" />
    
                    <GradientStop Color="#FFFFFFFF" Offset="0.85" />
    
                </LinearGradientBrush>
    
            </Rectangle.Fill>
    
        </Rectangle>
    
    </Grid>
    
    

    所执行的动画是:

    <DoubleAnimation Storyboard.TargetName="IndeterminateGradientFill" Storyboard.TargetProperty="(Shape.Fill).(LinearGradientBrush.Transform).(TransformGroup.Children)[0].X" Duration="00:00:.5" From="0" To="20"/>
    
    

    你可以分析一下这个是否与你的程序有什么冲突。是否同时执行了其它动画,另外Windowless设置为True也会导致CPU消耗增长。一般情况下是不会出下你遇到的这一问题。另外最好把你这个程序放到别的机器上试一下,看看是否有同样问题。还有一点,高CPU占有是用浏览器测试xap文件时候出现的么?还是直接在Blend里测试的,用Blend直接测试有时候会有高CPU的现象。


    我挨个试的发现我和好多因素有关系...比如我有几个自定义控件 用了DropShadowEffect 去掉就可以好Cup就降一些...
    没整明白怎么回事.现在自己用定时器模拟那滚动的效果了...
    ...
    2009年8月25日 5:55
  • 我觉得与其用IsIndeterminate=True,还不如直接做一个动画图像不就行了么,你说是不是?
    2009年8月25日 7:00
  • 我觉得与其用IsIndeterminate=True,还不如直接做一个动画图像不就行了么,你说是不是?

    是,是有个自己的动画在ProgressBar 上 呵呵
    ...
    2009年8月26日 3:16