C# XNA游戏在“退出”时不更新;拖拽;窗口,有事件处理程序吗?

C# XNA游戏在“退出”时不更新;拖拽;窗口,有事件处理程序吗?,c#,event-handling,xna,window,drag,C#,Event Handling,Xna,Window,Drag,我是XNA和C#的新手,在我的XNA项目中,我需要事件处理程序来预测游戏何时失去焦点,以便在它再次获得焦点时可以同步音乐和视觉。但我有一个问题;游戏在拖动时不会“更新”,但我似乎找不到合适的事件侦听器。我试过: System.Windows.Forms.Control.FromHandle(Window.Handle).Move += new EventHandler(DeactivateGame); 这个在移动窗口时多次调用“DeactivateGame”。但即使它能工作,尽管它多次调用函数

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

System.Windows.Forms.Control.FromHandle(Window.Handle).Move += new EventHandler(DeactivateGame);
这个在移动窗口时多次调用“DeactivateGame”。但即使它能工作,尽管它多次调用函数,但我看不到一个事件处理程序在释放窗口句柄时调用函数,以便通过调用“ActivateGame”再次恢复游戏

旁注(如果有帮助)

this.Activated+=新事件处理程序(NotifyActivated);
this.Deactivated+=新事件处理程序(NotifyDeactivated);
当最小化窗口或将焦点放在游戏窗口以外的其他对象上时,这些事件处理程序可以正常工作,但不会注册正在拖动的窗口。也许对于习惯编程的人来说很明显,但我只是想确保我已经提供了足够的信息

编辑:
我想作为事件处理程序的结果添加的函数是DateTime/TimeSpan,当窗口失去焦点或被拖动时会调用该函数。当删除或再次获取焦点时,这会将当前时间与窗口失去焦点时设置的时间进行比较,以计算两者之间的时间损失。

要检测XNA窗口何时被拖动,您使用该窗口的轨迹是正确的。请处理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.
}
然后将其与您提到的用于确定窗口何时最小化/恢复/激活的其他事件结合起来,以确定窗口已“不活动”多长时间

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.
}