我的任务是编写一个 .NET 应用程序来显示包含某些信息(文字或图像)的幻灯片,当用户看到某些项目时,他/她必须立即按空格键,并且按键时间必须是记录。这些项目将一个接一个地显示,大约 50 毫秒。然后我需要评估按键时间戳与幻灯片开始时的时间戳之间的差异(这样我就会知道用户对呈现的项目使用react需要多长时间)。 编辑:我还必须记录特殊元素出现的时间。
我需要减少应用程序运行时可能出现的任何不可预测的滞后,以便输入处理尽可能真实,并减少幻灯片之间的任何滞后。目前我正在考虑 3 种方法:
- 编写标准 Windows 窗体 (GDI+) 应用程序。
- 编写 WPF 应用程序
使用 Tom Miller's Render loop 编写一个支持 DirectX 的 Windows 窗体应用程序概念(在性能方面被称赞为有效)。
您可能会建议的其他内容
我必须澄清,我不会使用高级显示技术、特殊效果或专为 3D 环境而设计 - 只是使用不同字体和颜色的纯文本幻灯片或图像。不幸的是我不能引用我的来源,但我已经读到 Windows Forms 和 GDI+ 不能为我提供所需的准确性。那么,WPF 是否会为我提供更好的解决方案?我是否需要使用渲染循环或其他方法。我对桌面应用程序的此类性能要求没有经验,所有建议将不胜感激。
最佳答案
我个人喜欢 WPF,但我会非常谨慎地将它用于此应用程序。它不会具有与 GDI+ 或 DirectX 相同的时间精度。有各种各样的东西你必须使用,比如 DispatchTimer,它不是为这样的东西而构建的。 WPF 是图形之上的一整套巨大的抽象,你离金属越远,你就会引入潜在的问题。如果您想将视频投影到组合框内的 3D 球体顶部,那么 WPF 是最佳选择,但如果您需要在您所说的规模上的准确性/精度,WPF 不是答案。我不知道你在哪里读到 WPF 会为你提供更好的准确性,我几乎可以保证它不会。
DirectX 很可能是确保图片一次仅显示 50 毫秒的最准确方法。但 GDI+ 将是一个不错的替代解决方案,因为从编程的角度来看,它可以更轻松地处理文本。
另一个考虑因素是屏幕刷新率。哎呀。如果你计算一下,大多数 LCD 的响应率为 5 毫秒,这是你分配时间的 10%。那而且它们仅以 60Hz 显示。如果每秒显示 20 张图片(每张图片 50 毫秒),它只会在屏幕上显示 3 个刷新周期。
希望对您有所帮助。
关于c# - .NET 桌面应用程序方法的良好实时显示性能和输入处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13728653/