큰 문제가 있습니다. 내 WPF 응용 프로그램에서 MainWindow에 애니메이션로드 (스토리 보드)가있는 테두리가 있습니다. 기본적으로 축소됩니다. 때로는 많은 양의 데이터를로드하거나 새 XAML 화면을로드 할 때이를 표시하고 접을 수 있습니다.새 스레드를 사용하더라도 WPF 애니메이션이 멈 춥니 다.
우선, 나는 스레딩을 전혀 사용하지 않았으며 애니메이션은 얼어 붙어서 늦게 나타납니다.
그때 나는이 같은 스레딩을 사용하기 시작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 초 동안 동결 끝 없다, 나는 (I 목록, 같은 문제를 시도했다) 나는 내 MainWindow
에 ContentControl
내부에 다른 화면을로드 ObservableCollection
를 사용합니다.
저는 techdays 비디오, Fast and Furious를 보았습니다. 비디오 에서처럼 부드러운 애니메이션을 실제로 만들고 싶었지만 제거가 불가능한 것처럼 보입니다.
확실히 알 수있는 세부 정보는 충분하지 않지만 notifypropertychanged 이벤트를 뷰에 던지면 주 스레드가이를 처리합니다.따라서 스레드를 사용하여 작업을 수행하지만 변경 사항을 계속 알리는 경우 주 스레드는 여전히이를 처리하고 스레드가이를 점유합니다. – Geerten
ObservableCollection에 어떤 컨트롤을 바인딩하고 있습니까? 너는 어떻게 묶고 있니? 바인딩하지 않으면 문제가 해결됩니까? 나는 앱이 데이터를 표시하지 않고는 쓸모가 없다는 것을 안다. 이는 렌더링 문제인지 여부를 파악하는 것입니다. – Paparazzi