gpt4 book ai didi

c# - WPF 应用程序中的按钮响应较慢

转载 作者:太空宇宙 更新时间:2023-11-03 19:35:31 28 4
gpt4 key购买 nike

我为我的 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 的本地键盘,根据您正在做的事情的复杂程度,您可以使用an approach I've used in the past。您只需将键盘字符手动填充到具有焦点的 TextBox 中。

免责声明:我在 2 年前编写了该代码,因此讨厌它。虽然我通常会假装它不存在,但它可能会帮助您。从那以后我把它做得更好了,但这个概念本身在较慢的机器上没有性能问题。我会引用 Jeff Atwood 的博客关于你最讨厌的代码是你自己的,但是,好吧......

编辑:由于即使 Click 为空,您仍然有问题,您可能需要查看其他潜在的阻碍。用户的 CPU 是否已达到 100% 的上限?要么是太重的动画,要么是其他潜在事件?大多数 UI 延迟通常是 CPU 耗尽或事件在 UI 线程上花费的时间过长的结果。

一种可能性是,如果您的 Window 具有 AllowsTransparency="True",那么通常会转到显卡的大部分工作负载 will now be rendered in software, and can have heavy performance penalties.之后,您可以查看这篇关于 Optimizing WPF Application Performance 的 Microsoft 文章了解一些可以加快处理速度的一般提示。

我建议任何使用 XAML 进行开发的人都阅读上一篇文章。这些小细节之间的性能差异,例如使用 TextBlockLabel,或实现 DependencyPropertyINotifyPropertyChanged,真的可以加起来,而且他们针对每个进行基准测试的事实确实表明了正确设计的重要性。

关于c# - WPF 应用程序中的按钮响应较慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1891138/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com