>  기사  >  백엔드 개발  >  WPF에서 버튼을 동시에 여러 번 클릭하여 클릭을 트리거하는 인스턴스 방법을 가르칩니다.

WPF에서 버튼을 동시에 여러 번 클릭하여 클릭을 트리거하는 인스턴스 방법을 가르칩니다.

Y2J
Y2J원래의
2017-04-27 11:00:133096검색

이 글에서는 WPF에서 버튼을 동시에 여러 번 클릭하는 문제에 대한 해결 방법을 주로 자세히 소개합니다. 관심 있는 친구는

에서 문제 해결 방법을 참조할 수 있습니다. WPF 버튼 버튼을 동시에 여러 번 클릭하여 클릭을 발생시키는 방법은 참고용입니다. 구체적인 내용은 다음과 같습니다.

  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 스레드가 단일 스레드이기 때문에 클릭을 두 번 트리거하면 사용자가 연속적으로 두 번 클릭하게 되고 2초 후에 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에서 버튼을 동시에 여러 번 클릭하여 클릭을 트리거하는 인스턴스 방법을 가르칩니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.