Heim  >  Artikel  >  Backend-Entwicklung  >  Bringen Sie Ihnen die Instanzmethode zum Auslösen eines Klicks bei, indem Sie in WPF mehrmals gleichzeitig auf die Schaltfläche klicken

Bringen Sie Ihnen die Instanzmethode zum Auslösen eines Klicks bei, indem Sie in WPF mehrmals gleichzeitig auf die Schaltfläche klicken

Y2J
Y2JOriginal
2017-04-27 11:00:133094Durchsuche

In diesem Artikel wird hauptsächlich die Lösung für das Problem des mehrfachen gleichzeitigen Klickens auf die Schaltfläche in WPF vorgestellt. Interessierte Freunde können sich auf

Lösung für das Problem beziehen WPF Zu Ihrer Information: Klicken Sie mehrmals gleichzeitig auf die Schaltfläche, um den Klick auszulösen. Der spezifische Inhalt lautet wie folgt:

  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;
  }

Der obige Code kann das Problem, dass der Benutzer zweimal auf die Schaltfläche klickt, nicht lösen um den Klick zweimal auszulösen, da der UI-Thread ein Single-Thread ist. Ja, dies führt dazu, dass der Benutzer zweimal hintereinander klickt und Button_Click zwei Sekunden später erneut aufgerufen wird. Die Ausgabe lautet wie folgt:

1207.069,1; 19. April 2017 13:58:22
2055.1176,2;19. April 2017 13:58:24

Um die Schnittstelle zu erzwingen Danach aktualisieren.IsEnabled = false;, der Code lautet wie folgt:

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;
   }
  }

DispatcherHelper.DoEvents(); Diese Methode erzwingt die Aktualisierung der Schnittstelle und das Problem wird gelöst.

Das obige ist der detaillierte Inhalt vonBringen Sie Ihnen die Instanzmethode zum Auslösen eines Klicks bei, indem Sie in WPF mehrmals gleichzeitig auf die Schaltfläche klicken. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn