仅当窗口可见时执行操作
本文关键字:执行 操作 窗口 | 更新日期: 2023-09-27 18:21:10
我基本上想要的是这个代码的等价物,即我有一些昂贵的操作,我只想在用户能够真正看到更新时才做。
请注意,这与捕获IsVisibleChanged
事件不同,因为只有当我们真正隐藏窗口时,这才会起作用,但如果其他窗口覆盖了它,则不会起作用。
此外,我不是在寻找与Raymond在C++中完全相同的解决问题的代码——我在寻找WPF中最惯用的解决方案,只要结果相似,我就可以!
我知道您想要一个更以WPF为中心的答案,但您想要的是更多的系统级信息。即你的窗户是否可见或被另一扇窗户遮住。我认为Raymond的想法是有道理的,但由于Wpf对你隐藏了WndProc,你需要做一些事情,比如Andrew Eichacker在Wpf中关于附加到WndProc的博客文章所描述的。然后,您应该能够按照链接的建议拦截WM_PAINT消息。
来自以上链接:
在窗口的SourceInitialized事件中,创建HwndSource对象从你的窗户把手上。使用AddHook方法附加事件使用提供的函数处理窗口的所有事件。
使用Window.IsActive怎么样?