我面臨着一個大問題:在我的WPF應用程序中,MainWindow包含帶加載動畫(Storyboard)的邊框。默認情況下它已摺疊。當我加載大量數據或加載新的XAML屏幕時,我有時會將其顯示爲可見並摺疊。即使我使用新線程,WPF動畫也會凍結
首先,我沒有使用線程和動畫,其中都凍結和出現與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就像主線程阻塞所有線程一樣。
我試着添加計時器來延遲我的Messenger.StopAnimation()
到3秒鐘後。即使這樣,當我的新屏幕上的所有內容都被更改並加載後,我的動畫會持續1秒鐘,然後我的動畫會持續3秒。
我試過Dispatcher
,BackgroundWorker
並遇到了與以前的代碼相同的問題。
我試圖把我的動畫放在彈出窗口中,甚至是透明的新窗口。無關,它總是最終停止之前凍結1秒......
有關信息,我用ObservableCollection
(我試着名單,同樣的問題)和我在MainWindow
加載ContentControl
內不同的屏幕。
我看過Techdays視頻,速度與激情,我真的很想在視頻上看到流暢的動畫,但凍結似乎無法刪除。
你沒有給出足夠的細節來確定知道,但是如果你將notifypropertychanged事件扔到視圖中,這些將由主線程處理。所以,如果你使用線程來完成工作,但仍然通知變化,主線程仍然會處理這些變量並被它佔用。 – Geerten
您將ObservableCollection綁定到哪些控件?你有什麼約束力?如果你不綁定,問題就會消失嗎?我知道沒有顯示數據的應用程序是沒有用的。這是爲了隔離它是否是渲染問題。 – Paparazzi