Vous apprendre la méthode d'instance pour déclencher un clic en cliquant plusieurs fois sur le bouton en même temps dans WPF

Y2J
Libérer: 2017-04-27 11:00:13
original
3149 Les gens l'ont consulté

Cet article présente principalement en détail la solution au problème de cliquer plusieurs fois sur le bouton en même temps dans WPF. Il a une certaine valeur de référence. Les amis intéressés peuvent se référer à

Solution au problème dans . WPF Pour votre référence, le bouton est cliqué plusieurs fois en même temps pour déclencher le clic. Le contenu spécifique est le suivant

  DateTime lastClick = DateTime.Now;
  object obj = new object();
  int i = 0;
  private void Button_Click(object sender, RoutedEventArgs e)
  {
   this.IsEnabled = false;  
   var t = (DateTime.Now - lastClick).TotalMilliseconds;
   i++;
   lastClick = DateTime.Now;
   System.Diagnostics.Debug.Print(t + "," + i + ";" + DateTime.Now);
   Thread.Sleep(2000);   
   this.IsEnabled = true;
  }
Copier après la connexion

Le code ci-dessus ne peut pas résoudre le problème de l'utilisateur cliquant deux fois sur le bouton. pour déclencher le clic deux fois, car le thread de l'interface utilisateur est monothread Oui, cela amènera l'utilisateur à cliquer deux fois de suite, et Button_Click sera à nouveau appelé deux secondes plus tard. Le résultat est le suivant :

<🎜. >

1207.069,1; 19 avril 2017 13:58:222055.1176,2;19 avril 2017 13:58:24

Donc pour forcer l'interface actualisez après this.IsEnabled = false;, le code est le suivant :

private void Button_Click(object sender, RoutedEventArgs e)
  {
   this.IsEnabled = false;
   DispatcherHelper.DoEvents();
   var t = (DateTime.Now - lastClick).TotalMilliseconds;
   i++;
   lastClick = DateTime.Now;
   System.Diagnostics.Debug.Print(t + "," + i + ";" + DateTime.Now);
   Thread.Sleep(2000);   
   this.IsEnabled = true;
  }
  public static class DispatcherHelper
  {
   [SecurityPermissionAttribute(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)]
   public static void DoEvents()
   {
    DispatcherFrame frame = new DispatcherFrame();
    Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Background, new DispatcherOperationCallback(ExitFrames), frame);
    try { Dispatcher.PushFrame(frame); }
    catch (InvalidOperationException) { }
   }
   private static object ExitFrames(object frame)
   {
    ((DispatcherFrame)frame).Continue = false;
    return null;
   }
  }
Copier après la connexion
DispatcherHelper.DoEvents(); Cette méthode forcera l'actualisation de l'interface et le problème sera résolu.

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!

Étiquettes associées:
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal