2

プログラムでグリッドの位置を変更する単純なアプリケーションを WPF で作成しています。

主な目的はボタンをクリックすることであり、グリッドは左、右、上、下などに移動し始めます.

だから私はこのコードを書いた:

    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 でそれを行う必要がありました。

4

1 に答える 1