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!