在WPF应用程序慢按钮响应
-
19-09-2019 - |
题
有关我的WPF应用程序,我公司开发的虚拟键盘。它运行我的开发机器上的罚款。然而,在较慢的机器按钮点击的响应速度很慢。点击按钮后,没有与按钮按下的状态,按钮事件显示更新之前的延迟。我能做些什么来消除这种延迟?是问题的一个WPF显示问题?
我以为这是很慢的事件处理程序,我试过多种方法来发送一个键盘按键按下事件。不管是什么我已经试过,互动仍然缓慢。目前我使用:
SendInput(uint nInputs, ref INPUT pInputs, int cbSize);
这USER32.DLL进口。我的事件处理程序被简化为在那里它仅用于创建参数并调用上述函数的点。
我也尝试使用以下,但没有任何更好的表现:
System.Windows.Input.Keyboard.FocusedElement.RaiseEvent(...)
我如何才能摆脱延迟?
解决方案
您能告诉是什么原因造成的延误?
如果有一些慢的Click
事件,你可能希望用一个单独的Thread
来执行代码。在新的线程,如果有必须在UI线程中执行代码,使用Dispatcher.BeginInvoke
排队起来的时候,该UI处理时间执行。为了保持UI响应,你需要保持任何重码断主(UI)线程。
如果您的虚拟键盘是当地有一定Window
,这取决于你在做什么的复杂性,你可以采取的我已经在过去使用的方法,你只手工填写键盘字符转换成具有焦点的TextBox
。
声明:我写的代码,2年多前,恨它作为一个结果。虽然我通常假装它不存在,它可以帮助你。我从那时起更好的做到了,但这个概念本身对较慢的机器没有任何性能问题。我想引用杰夫·阿特伍德的博客对你最讨厌的代码是你自己的,但是,嗯......
编辑:因为你还有即使Click
空的问题,您可能想看看其他潜在敲竹杠。是用户的CPU在100%的东西刷爆了?无论是过重的动画,或其他潜在的事件?最UI延迟通常是要么一个刷爆CPU或一个事件的时间过长的UI的线程上的结果。
一种可能性是,如果你的Window
有AllowsTransparency="True"
,大部分的工作量通常会去显卡的现在将软件呈现,并能有大的性能损失。的过去,你可以去看看在这个微软的文章优化WPF应用程序性能对于一些普通的技巧,这可以加快你的处理。
我会建议任何人在XAML开发读到最后一篇文章。在这样的小细节,比如使用TextBlock
与Label
,或实施DependencyProperty
的与INotifyPropertyChanged
之间的性能差异,真的可以积少成多,而且,他们对基准每个事实上真正体现出的正确设计的重要性。
其他提示
只是碰到这种讨论跑去。我有一个WinForms应用程序,其中的按钮响应很慢。这件事发生后,我升级到64位Windows 7我发现,如果我改变了我的项目目标为“86”(而不是“任何CPU”),慢按钮响应就走了。
如果您的事件处理程序需要很长的时间来完成,这将锁定为当时的UI。尝试这个 事件处理程序:
private void button1_Click(object sender, RoutedEventArgs e)
{
System.Threading.Thread.Sleep(5000);
}
您的事件处理程序可能只是完成一个更快的机器就快多了。对于缓慢的操作,你可能要工作推到另一个线程。