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

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

Susan Sarandon
Libérer: 2025-01-13 11:10:43
original
816 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal