首頁  >  文章  >  後端開發  >  教你WPF中button按鈕同時點擊多次觸發click的實例方法

教你WPF中button按鈕同時點擊多次觸發click的實例方法

Y2J
Y2J原創
2017-04-27 11:00:133137瀏覽

這篇文章主要為大家詳細介紹了WPF中button按鈕同時點擊多次觸發click的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下

解決WPF中button按鈕同時點擊多次觸發click的方法,供大家參考,具體內容如下

  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:22
2055.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();這個方法會強制介面刷新,問題就解決了。

以上是教你WPF中button按鈕同時點擊多次觸發click的實例方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn