首页 > 解决方案 > Winforms窗口冻结

问题描述

C#

我在我的蛇游戏中实现了一个加电系统,每次我运行该方法来产生一个加电时,窗口都会完全停止,就好像它正在处理一些沉重但永远的东西。我没有收到任何错误,也没有窗口要求关闭窗口。

这是我的脚本:

        private void spawn_powerup()
    {
        int r = random.Next(0, Powers.Length);
        foreach (Power_Up item in Powers)
        {
            if (item.code == r)
            {
                bool done = false;
                do
                {
                    int X = random.Next(0, grid_size);
                    int Y = random.Next(0, grid_size);
                    if (matriz[X, Y] == background_color)
                    {
                        matriz[X, Y] = item.Pixel_color;
                        done = true;
                        item.placed = true;
                    }
                } while (done);
                return;
            }
        }
    }

标签: c#winformsfreeze

解决方案


你从来没有设置donefalse你的do-while-loop.

因此,如果在您的第​​一次迭代中,您的 if 表达式的计算结果为true,done设置为true并且您do-while将永远运行

对于我认为你想要实现的改变你的do-while条件!done,但是你必须确保你的if条件在一段时间后得到满足(但在蛇游戏中这应该不是什么大问题)。


推荐阅读