Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF在折叠UserControl后仍在呈现它_C#_Wpf_Multithreading_Xaml_Animation - Fatal编程技术网

C# WPF在折叠UserControl后仍在呈现它

C# WPF在折叠UserControl后仍在呈现它,c#,wpf,multithreading,xaml,animation,C#,Wpf,Multithreading,Xaml,Animation,我有一个加载动画的用户控件,LoadingAnimation.xaml,它包含在另一个名为loading.xaml的用户控件中 加载animation.xaml的一部分: 加载动画由“我的代码隐藏”中的静态变量控制: public async void UpdateScreen() { //Activating Loading animation PropertySettings.Instance.IsVisible = Visibility.Vi

我有一个加载动画的用户控件,
LoadingAnimation.xaml
,它包含在另一个名为
loading.xaml
的用户控件中

加载animation.xaml的一部分:
加载动画由“我的代码隐藏”中的静态变量控制:

    public async void UpdateScreen()
    {
        //Activating Loading animation
        PropertySettings.Instance.IsVisible = Visibility.Visible;
        PropertySettings.Instance.IsActive = true;

        await Task.Run(() =>
        {
            Thread.Sleep(4000);
        });

            //Deactivating Loading animation
            PropertySettings.Instance.IsVisible = Visibility.Collapsed;
            PropertySettings.Instance.IsActive = false;

    }
功能运行得很好。加载动画是可见的,并且在任务完成后确实会折叠

但是,在调用异步方法之前,cpu使用率为0%。当加载动画可见且处于活动状态时,cpu使用率将达到19%。加载动画被折叠和禁用后,cpu使用率达到9%,这应该是0%

我确实运行了WPF performance suit,这导致渲染线程仍在工作,并且占用了大量cpu

我确实尝试在
应用程序.Current.Dispatcher.BeginInvoke
中禁用加载动画,但没有成功。cpu仍然很高:

     Application.Current.Dispatcher.BeginInvoke(new Action(() =>
        {
            //Deactivating Loading animation
            PropertySettings.Instance.IsVisible = Visibility.Collapsed;
            PropertySettings.Instance.IsActive = false;
        }));

为什么程序崩溃后cpu使用率没有达到零?

这是因为您从未告诉动画停止。它可能已折叠,但动画仍在继续。您需要指示它在折叠/加载内容后移除/暂停故事板。“渲染线程仍在工作,并且占用大量cpu”-wpf足够智能,不会渲染不可见元素,它不能渲染此元素,但可能是其他元素。您使用的是
RepeatBehavior=“Forever”
和never
ProgressAnimation
,这在加载动画时并不明智。感谢您提供的有用意见。我通过停止动画来修复它。我犯了一个愚蠢的错误,因为你从来没有告诉动画停止。它可能已折叠,但动画仍在继续。您需要指示它在折叠/加载内容后移除/暂停故事板。“渲染线程仍在工作,并且占用大量cpu”-wpf足够智能,不会渲染不可见元素,它不能渲染此元素,但可能是其他元素。您使用的是
RepeatBehavior=“Forever”
和never
ProgressAnimation
,这在加载动画时并不明智。感谢您提供的有用意见。我通过停止动画来修复它。这是我这边的一个愚蠢的错误。
    <local:Loading x:Name="loadingWin" HorizontalAlignment="Center" VerticalAlignment="Center" Panel.ZIndex="10" Visibility="{Binding Path=IsVisible, Source={x:Static local:PropertySettings.Instance}}"  IsEnabled="{Binding Path=IsActive, Source={x:Static local:PropertySettings.Instance}}" />
    public async void UpdateScreen()
    {
        //Activating Loading animation
        PropertySettings.Instance.IsVisible = Visibility.Visible;
        PropertySettings.Instance.IsActive = true;

        await Task.Run(() =>
        {
            Thread.Sleep(4000);
        });

            //Deactivating Loading animation
            PropertySettings.Instance.IsVisible = Visibility.Collapsed;
            PropertySettings.Instance.IsActive = false;

    }
     Application.Current.Dispatcher.BeginInvoke(new Action(() =>
        {
            //Deactivating Loading animation
            PropertySettings.Instance.IsVisible = Visibility.Collapsed;
            PropertySettings.Instance.IsActive = false;
        }));