即使我使用新线程,WPF动画也会冻结

即使我使用新线程,WPF动画也会冻结,第1张

概述我面临一个大问题:在我的 WPF应用程序中,MainWindow包含带有加载动画的边框(故事板).默认情况下它已折叠.当我加载大量数据或加载新的XAML屏幕时,我有时会将其显示和折叠. 首先,我根本没有使用线程和动画,其中既冻结又出现了lates. 然后我开始像这样使用线程: Messenger.StartAnimation();var task = Task.Factory.StartNew( 我面临一个大问题:在我的 WPF应用程序中,MainWindow包含带有加载动画的边框(故事板).默认情况下它已折叠.当我加载大量数据或加载新的XAML屏幕时,我有时会将其显示和折叠.

首先,我根本没有使用线程和动画,其中既冻结又出现了lates.

然后我开始像这样使用线程:

Messenger.StartAnimation();var task = Task.Factory.StartNew(() =>                {                    Thread.Sleep(150);                }).ContinueWith((a) =>                {                    // HERE Screen moving + large amount of data loaded with Entity Framework                    Thread.Sleep(200);                    Messenger.StopAnimation();                },CancellationToken.None,TaskContinuationoptions.NotOnFaulted,threadUIContext);

这一次,动画在1秒内工作,然后它就冻结,直到所有数据和新显示的屏幕都加载完毕. A就像主线程阻塞所有线程一样.

我试图将Timer添加到延迟我的Messenger.StopAnimation()到3秒后.当所有内容都被更改并加载到我的新屏幕上然后我的动画持续3秒时,即使这样也会冻结我的动画1秒钟.

我已经尝试过dispatcher,BackgrounDWorker并遇到了与之前代码相同的问题.

我试图将我的动画放在一个d出窗口,甚至是一个透明的新窗口.没什么可做的,它总是在停止之前冻结1秒钟……

有关信息,我使用ObservableCollection(我已尝试使用List,同样的问题)并在我的MainWindow中的ContentControl中加载不同的屏幕.

我看过techdays视频,速度与激情,我真的想在视频上得到一个流畅的动画,但冻结似乎无法删除.

解决方法 在简单的集合视图中加载50个小图像时,我遇到了同样的问题.我最终发现,.NET Framework将位图绘制到屏幕上是主线程的关键所在,而我绝对无法绕过它.我尝试将所有元素放在视图中,但是慢慢填充绑定到视图的集合,但每次更改observable集合时,.NET Framework都会重新绘制视图中的所有图像,因此这也没有用.

我向微软工程师询问了这个问题,他直截了当地承认,.NET框架中的一个问题将来必须由微软修复.我的一位同事说,你可以通过自己的算法自己绘制所有像素来规避问题.

我想如果你想解决这个问题,你必须改变你的数据显示方式,尽管我可以帮助你解决这个问题.

总结

以上是内存溢出为你收集整理的即使我使用新线程,WPF动画也会冻结全部内容,希望文章能够帮你解决即使我使用新线程,WPF动画也会冻结所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1196738.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存