Heim >Backend-Entwicklung >C#.Net-Tutorial >Bringen Sie Ihnen die Instanzmethode zum Auslösen eines Klicks bei, indem Sie in WPF mehrmals gleichzeitig auf die Schaltfläche klicken
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!