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

Y2J
Freigeben: 2017-04-27 11:00:13
Original
3093 Leute haben es durchsucht

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;
  }
Nach dem Login kopieren

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;
   }
  }
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Aktuelle Ausgaben
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!