WPF에서 프로그래밍 방식으로 눈금의 위치를 변경하는 간단한 응용 프로그램을 만들고 있습니다. 어떻게됩니까C# WPF GUI 및 이동 표 업데이트
Grid G = new Grid();
private void Window_Loaded_1(object sender, RoutedEventArgs e)
{
Thread tt = new Thread(() =>
{
Dispatcher.Invoke((MethodInvoker)delegate { RUN(); });
}); tt.Start();
}
private void RUN()
{
G.Margin = new Thickness(0, MAIN_GRID.ActualHeight, 0, 0);
G.Visibility = System.Windows.Visibility.Visible;
G.Background = System.Windows.Media.Brushes.Black;
MAIN_GRID.Children.Add(G);
while (G.Margin.Top > 0)
{
G.Margin = new Thickness(0, G.Margin.Top - 1, 0, 0);
MAIN_GRID.InvalidateVisual(); // tried refreshing the GUI but no good...
Thread.Sleep(10);
}
}
:
그래서 내가이 코드를 썼다 .. 주요 목적은 버튼을 클릭하고 그리드는 왼쪽, 오른쪽, 위, 아래 등으로 이동이 시작됩니다 그것은 내가 필요로하는 것을 정확하게하지만 애니메이션을 보여주지 않고 있다는 것입니다.
예를 들어 내 코드는 그리드를 1 픽셀 씩 위로 움직여야하고 10 밀리 초 동안 잠자기 상태이면 실제로 움직이는 그리드를 볼 수 있습니다.
대신에 고정시키고 일단 완료되면 그리드의 최종 위치를 보여줍니다.
나는 스레딩을 사용하는 Windows 응용 프로그램에서만이를 수행하므로 제대로 작동합니다. 하지만 나는 그것이 더 매끄러 워야하기 때문에 WPF에서 그렇게해야했습니다.
이것은'WinForms'에서 작동합니까? 'Thread.Sleep' 직후의'Application.DoEvents()'와 같은 의문의 여지가 없으면'WinForms'을 사용하여 똑같은 문제를 경험할 것이라고 기대합니다. 아래 Garry의 조언을 듣고 스토리 보드를 찾아보십시오. 이것은 Flash에서 타임 라인을 만드는 것과 매우 유사하며, 애니메이션은 거의 비슷합니다 (WinForms를 사용하여 할 수있는 것 이상의 광년입니다). –
@ GrantWinney 저는 실제로 Windows 양식에서 스레딩을 사용하고있었습니다. – BOSS
아, 다음 위치를 결정한 다음 별도의 스레드 (예 : BackgroundWorker)가 메인 UI 스레드로 다시 전송되는 것을 볼 수 있습니다. 어쨌든 스토리 보드와 함께 행운을 빌어 요! –