Maison >développement back-end >C++ >Comment obtenir la fonctionnalité Application.DoEvents() dans WPF ?

Comment obtenir la fonctionnalité Application.DoEvents() dans WPF ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-13 11:10:43822parcourir

How to Achieve the Application.DoEvents() Functionality in WPF?

Méthode Mock Application.DoEvents() dans WPF

Dans une application Windows Forms traditionnelle, la méthode Application.DoEvents() permet à l'application de redonner le contrôle au système d'exploitation pour gérer d'autres événements de l'interface utilisateur. Cependant, il n’existe pas de méthode Application.DoEvents() équivalente nativement dans WPF.

Pour résoudre ce problème, vous pouvez créer une méthode DoEvents() personnalisée. Voici un exemple :

<code class="language-csharp">public static void DoEvents()
{
    Application.Current.Dispatcher.Invoke(DispatcherPriority.Background,
                                          new Action(delegate { }));
}</code>

Cette méthode utilise la méthode Dispatcher.Invoke() pour appeler un délégué vide sur le thread du planificateur en arrière-plan. Cela oblige le planificateur à gérer toutes les tâches en attente, rendant ainsi le contrôle au système d'exploitation.

Considérez l'exemple de code suivant :

<code class="language-csharp">public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void myButton_Click(object sender, RoutedEventArgs e)
    {
        Console.WriteLine($"缩放比例:{myScaleTransform.ScaleX},位置:{myCanvas.PointToScreen(GetMyButtonLocation())}");

        myScaleTransform.ScaleX = myScaleTransform.ScaleY = myScaleTransform.ScaleX + 1;

        DoEvents();
        // 处理任何挂起的 UI 事件以更新按钮的位置

        Console.WriteLine($"缩放比例:{myScaleTransform.ScaleX},位置:{myCanvas.PointToScreen(GetMyButtonLocation())}");
    }

    private Point GetMyButtonLocation()
    {
        return new Point(Canvas.GetLeft(myButton), Canvas.GetTop(myButton));
    }
}</code>

En appelant manuellement DoEvents() après la mise à jour de la transformation d'échelle, l'application s'assure que la position du bouton est mise à jour avant le prochain Console.WriteLine() appel.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn