XNA游戏不会在“拖动”窗口,任何事件处理程序时更新?

我是XNA和C#的新手,我已经到了我的XNA项目,我需要事件处理程序来预测游戏何时失去焦点,以便我可以在再次获得焦点后同步音乐和视觉效果。 但是我遇到了一个问题; 被拖动时游戏不会“更新”,但我似乎无法为此找到合适的事件监听器。 我试过了:

System.Windows.Forms.Control.FromHandle(Window.Handle).Move += new EventHandler(DeactivateGame); 

移动窗口时,这个叫做“DeactivateGame”很多次。 但即使它工作,尽管它不止一次调用该函数,我看不到一个事件处理程序,当窗口句柄被释放时调用一个函数,以便通过调用“ActivateGame”再次恢复游戏

旁注(如果有帮助的话);

 this.Activated += new EventHandler(NotifyActivated); this.Deactivated += new EventHandler(NotifyDeactivated); 

这些事件处理程序在最小化窗口或将焦点放在除游戏窗口之外的其他内容时工作正常,但它不会注册被拖动的窗口。 对于习惯编程的人来说可能很明显,但我只是想确保我已经提供了足够的信息

编辑:我想要添加的事件作为事件处理程序的结果是一个DateTime / TimeSpan,当窗口失焦或拖动时调用它。 当丢弃或再次聚焦时,这将比较当前时间与窗口失去焦点时设置的时间,以计算两者之间的丢失时间。

为了检测何时拖动XNA窗口,使用Window.Handle和Windows窗体,您在正确的轨道上。 您可以简单地收听ResizeBegin和ResizeEnd事件,以了解用户何时开始移动窗口以及何时释放窗口。

 var xnaWinForm = (System.Windows.Forms.Control.FromHandle(Window.Handle) as System.Windows.Forms.Form); if (xnaWinForm != null) { xnaWinForm.ResizeBegin += new EventHandler(xnaWinForm_ResizeBegin); xnaWinForm.ResizeEnd += new EventHandler(xnaWinForm_ResizeEnd); } 

这就是事件处理程序的样子。

 void xnaWinForm_ResizeBegin(object sender, EventArgs e) { // XNA window is starting to be moved. } void xnaWinForm_ResizeEnd(object sender, EventArgs e) { // XNA window was released and is no longer being moved. } 

然后将其与您提到的其他事件结合起来,以确定窗口何时最小化/恢复/活动以确定窗口已“无效”的时间长度。