WPF中button按钮同时点击多次触发click解决方法

2017-04-19 21:43:03来源:cnblogs.com作者:liningit人点击

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

以上代码并没法解决用户点击两次按钮触发两次的问题,因为ui线程是单线程的,所以这个这样会导致用户连续点击两次,会两秒后又调用Button_Click一次,输出如下:

1207.069,1;2017年4月19日 13:58:222055.1176,2;2017年4月19日 13:58:24

所以要在this.IsEnabled = false;后面强制界面刷新,代码如下:

   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();这个方法会强制界面刷新,问题就解决了

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台