仅当窗口可见时才执行操作

时间:2012-01-23 01:46:47

标签: c# .net wpf

我基本上想要的是相当于this代码,即我有一些昂贵的操作,我只想在用户实际看到更新时才能这样做。

请注意,这与仅捕获IsVisibleChanged事件不同,因为这只有在我们真正隐藏窗口时才有效,但如果其他窗口覆盖它则不会。

此外,我寻找解决问题的代码与Raymond在C ++中完全相同 - 我正在寻找WPF中最惯用的解决方案,只要结果是我觉得很好!

2 个答案:

答案 0 :(得分:1)

我知道您想要更多以WPF为中心的答案,但您正在寻找的是更多系统级信息。即你的窗户是否可见或被另一扇窗户覆盖。我认为雷蒙德的想法是有道理的,但是既然Wpf会隐藏你的WndProc,你需要做一些类似于这个博客文章由Andrew Eichacker在Attaching to WndProc in WPF描述。然后,您应该能够根据链接建议拦截WM_PAINT消息。

从上面链接:

  

在窗口的SourceInitialized事件中,创建一个HwndSource对象   从你的窗口的句柄。使用AddHook方法附加事件   使用提供的函数处理所有窗口事件。

答案 1 :(得分:0)

使用Window.IsActive怎么样?