이 글에서는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!