我面临一个大问题:在我的 WPF 应用程序中,MainWindow 包含一个带有加载动画(故事板)的边框。默认情况下它是折叠的。当我加载大量数据或加载新的 XAML 屏幕时,有时会使其可见并折叠。
首先,我根本没有使用线程和动画,其中既冻结又出现迟到。
然后我开始像这样使用线程:
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 秒后。当一切都被改变并加载到我的新屏幕上时,即使这样我的动画也会冻结 1 秒钟,然后我的动画会持续 3 秒钟。
我已经尝试过Dispatcher
,BackgroundWorker
并且遇到了与以前的代码相同的问题。
我试图将我的动画放在一个弹出窗口上,甚至放在一个透明的新窗口上。没什么可做的,它总是在停止之前冻结 1 秒钟......
对于信息,我使用ObservableCollection
(我尝试过使用 List,同样的问题)并且我ContentControl
在我的MainWindow
.
我看过 techdays 的视频,速度与激情,我真的很想得到一个像视频一样流畅的动画,但冻结似乎无法消除。