C# XNA游戏启动时被困在白色屏幕上

C# XNA游戏启动时被困在白色屏幕上,c#,windows,xna,C#,Windows,Xna,启动XNA游戏时,白色屏幕会快速闪烁。在较慢的机器上,这比在较快的机器上更明显。我们用WPF开发的菜单系统开发了一套游戏套装。此菜单启动XNA游戏,并将其窗口设置为只有在具有焦点时前景窗口才起作用 我们遇到的问题是,如果玩家在游戏开始后一直按左键,系统就会被困在这个白色屏幕闪光灯中。屏幕保持白色,玩家无法退出此屏幕,鼠标alt键正常,但不受欢迎 我怎样才能防止这种情况发生?我确实希望将XNA游戏设置为前台窗口,因为根据玩家单击的位置,菜单系统可以保持活动状态 这是启动XNA游戏的菜单系统的代码

启动XNA游戏时,白色屏幕会快速闪烁。在较慢的机器上,这比在较快的机器上更明显。我们用WPF开发的菜单系统开发了一套游戏套装。此菜单启动XNA游戏,并将其窗口设置为只有在具有焦点时前景窗口才起作用

我们遇到的问题是,如果玩家在游戏开始后一直按左键,系统就会被困在这个白色屏幕闪光灯中。屏幕保持白色,玩家无法退出此屏幕,鼠标alt键正常,但不受欢迎

我怎样才能防止这种情况发生?我确实希望将XNA游戏设置为前台窗口,因为根据玩家单击的位置,菜单系统可以保持活动状态

这是启动XNA游戏的菜单系统的代码

var process = Process.Start(info);
var currentProcess = Process.GetCurrentProcess();
while (!process.HasExited)
{
    Thread.Sleep(50);
    if (GetForegroundWindow() == currentProcess.MainWindowHandle)
    {
        Activate(process.MainWindowHandle);
    }
}
这是将XNA游戏设置为前台窗口的代码

    /// <summary>
    /// Sets the window to be foreground
    /// </summary>
    [DllImport("User32")]
    private static extern int SetForegroundWindow(IntPtr hwnd);

    /// <summary>
    /// Activate or minimize a window
    /// </summary>
    [DllImportAttribute("User32.DLL")]
    private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
    private const int SW_SHOW = 5;
    private const int SW_MINIMIZE = 6;
    private const int SW_RESTORE = 9;

    /// <summary>
    /// The GetForegroundWindow function returns a handle to the foreground window.
    /// </summary>
    [DllImport("user32.dll")]
    private static extern IntPtr GetForegroundWindow();

    private static void Activate(IntPtr windowHandle)
    {
        ShowWindow(windowHandle, SW_RESTORE);
        SetForegroundWindow(windowHandle);
    }
谢谢,
Wouter

首先,闪存可能是由于DirectX设备初始化造成的,该初始化发生在XNA窗口从最小化状态恢复或设备最初创建时;有些事件可以捕获这些事件。我不知道按下左键时你在做什么,但我会检查以确保你没有导致另一个设备初始化发生

关键事件是包含在中的事件,尤其是重置事件。确保设备复位时,不处理任何输入