Maison > Article > développement back-end > 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
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; }
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
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(); 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!