C# XNA项目中的屏幕未刷新

C# XNA项目中的屏幕未刷新,c#,winforms,xna,C#,Winforms,Xna,我将winforms与xna一起使用。 到目前为止,除了画画,一切都正常。这是我的初始代码: protected override void Draw() { GraphicsDevice.Clear(Color.CornflowerBlue); spriteBatch.Begin(); tileSheet.Draw(spriteBatch); foreach (Ima

我将winforms与xna一起使用。 到目前为止,除了画画,一切都正常。这是我的初始代码:

        protected override void Draw()
        {
            GraphicsDevice.Clear(Color.CornflowerBlue);
            spriteBatch.Begin();
            tileSheet.Draw(spriteBatch);
            foreach (Image img in selector)
                img.Draw(spriteBatch);
            spriteBatch.End();
        }
我放置了一个断点,它正在调用draw方法,但屏幕上没有任何变化,但当我这样做时:

protected override void Draw()
    {
        GraphicsDevice.Clear(Color.CornflowerBlue);
        spriteBatch.Begin();
        tileSheet.Draw(spriteBatch);
        foreach (Image img in selector)
            img.Draw(spriteBatch);
        spriteBatch.End();

        Invalidate();
    }
它起作用了!但问题是,一切都冻结了,似乎陷入了一个无效循环。但为什么后者对前者有效而对前者无效?我已经为此工作了好几个小时,我不明白出了什么问题:/

我觉得这是件简单的事,但我不能把我的头围绕着它

我也尝试过更新和刷新,但它们都不起作用。

Invalidate调用Draw1,因此在组合中使用Invalidate,Invalidate->Draw->Invalidate->Draw->

“修复”是指不会在绘图中失效。相反,只调用Invalidate来响应需要[重新]绘制的输入。对于“非工作”(但实际上,它是工作的!)前者,请确保在适当的时候调用Invalidate-但是从绘图处理程序外部调用



1无效调用“稍后某个时间”绘制,但这是一个异步操作。它有效地发布WinForms进程在窗口消息循环中处理的消息,然后调用OnPaint,最后调用Draw。但是,从绘图中调用Invalidate将导致“太多更新太快”。

我了解Invalidate的工作原理。我的初始化方法中有这个。Application.Idle+=委托{Invalidate();};它确实调用了draw方法,但是除非我把它放在draw方法中,否则不会更新任何东西。这就是我的问题Invalidate通过调用draw方法来完成它的工作,但是没有任何东西被绘制到屏幕上。只有当我在draw方法中加入Invalidate时,才会绘制某些内容。@CodingMadeEasy那么听起来好像没有适当地调用Invalidate-即空闲事件处理程序从未触发。在那里放一个断点。还可以尝试使用调用Invalidate的按钮。使用刷新是不合适的,因为它甚至不会进入消息队列!也就是说,从Draw调用Refresh将始终冻结/崩溃。空闲事件正在触发。它正在触发触发draw方法的Invalidate事件。它通过draw方法,但在屏幕上什么也没有发生。当我在draw方法中使用invalidate时,我看到了结果,但它冻结了所有其他内容。奇怪的是,我没有物品了:祝你好运!考虑更新原始帖子,包括你的评论中的信息。