当前位置: 首页 > 编程语言 > C#

为什么这段双击检测代码不靠谱?分享

时间:2023-04-11 11:55:40 C#

这个双击检测代码为什么不靠谱?我正在尝试通过一些简单的挑战来学习Rx,首先是通过观察MouseUp事件来检测双击。我提出了以下解决方案(此代码通过创建WPF项目并添加ReactiveExtensionsNuGet包进行编译):使用System.Reactive.Linq;使用System.Windows.Input;namespaceWpfApplication1{publicpartialclassMainWindow{publicMainWindow(){InitializeComponent();varclickEvents=Observable.FromEventPattern(this,"MouseLeftButtonUp");varintraClickInterval=TimeSpan.FromMilliseconds(500);varinterClickInterval=TimeSpan.FromMilliseconds(1000);.SkipWhile(t=>t.Intervalt.IntervalConsole.WriteLine("现在接受双击!"));doubleClicks.Subscribe(e=>Console.WriteLine(e.Interval));我见过大多数解决方案不处理多次点击,所以我的想法是总是在每次双击之间等待一定的间隔(interClickInterval),然后双击是下一个间隔更短的鼠标弹起事件比intraClickInterval。我还添加了一条消息,该消息在interClickInterval过去后每次双击后打印,以便我知道何时应该注册双击。这似乎在一般情况下运作良好,但有时他们似乎没有注册,即使我看到“现在可以接受双击!”信息。如果我在消息出现之前单击,似乎会发生这种情况。是什么原因造成的?编辑:我认为双击检测实际上是正确的,这不是消息。基本上,它会忽略双击后的任何后续点击。我需要做点什么,但我不确定如何实现这一点……所以,我怀疑检测代码是正确的,而且是错误的消息。双击后不考虑任何后续点击;每次双击后,它只会在1000毫秒后始终打印消息。这是从上次点击后每次双击后正确等待1000毫秒就绪消息的一个版本:以上是C#学习教程:为什么这个双击检测代码不可靠?如果分享的内容对你有用,需要进一步了解C#学习教程,希望你多多关注——vardoubleClickReady=doubleClicks.SelectMany(clickEvents.Buffer(interClickInterval).FirstAsync(b=>b.Count==0));doubleClickReady.Subscribe(e=>Console.WriteLine("现在接受双击!"));本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:

最新推荐
猜你喜欢