For, While, Do 循环在迭代中导致奇怪的错误,涉及变量

For, While, Do Loops causing strange error in iteration, concerning variables

所以我是菜鸟,请把它放在上下文中。如果我遗漏了任何明显的内容,我很抱歉。

遵守以下方法:

public static void DrawImageRepeatHoriz(Bitmap i, int y)
{
    int counter = 0;                
    while (counter < 4)
    {
        paint_order.Enqueue(() => buffer.Graphics.DrawImage(i, new 
        Point(50 * counter, 0)));
        counter++;                    
    }

    /*paint_order.Enqueue(() => buffer.Graphics.DrawImage(i, new 
    Point(0 * 50, 0)));
    paint_order.Enqueue(() => buffer.Graphics.DrawImage(i, new 
    Point(1 * 50, 0)));
    paint_order.Enqueue(() => buffer.Graphics.DrawImage(i, new 
    Point(2 * 50, 0)));
    paint_order.Enqueue(() => buffer.Graphics.DrawImage(i, new 
    Point(3 * 50, 0)));*/
}

该方法应该接受图像和 Y 值。它对这些的作用是,在那个 y 值下,图像将被绘制几次——足以让它至少填满屏幕。

所以它沿着 y 轴上的点在屏幕上重复图像。

如您所见,我删除了大部分逻辑,因为我必须调试一些妨碍我的东西。

这里的其他内容是 buffer 已通过使用当前上下文和由 [=49 返回的 g 进行分配来正确创建=] SomeForm.CreateGraphics() 所以请不要担心图形,当我按照我说的手动操作时它工作正常。 buffer 是有效的, 并且使用的参数有效。

提前致谢。

这很令人沮丧。

编辑:傻我,我没有解释paint_order

static Queue<Action> paint_order = new Queue<Action>(20);

似乎总是有相同的对 counter 变量的引用传递给您排队的 lambda 并且这些函数在循环运行后被调用(这样每次它引用 counter 它将是 3) - 我引入了每次需要计算新值时实例化的新变量:

for (int counter = 0; counter < 4; counter ++)
{
    var pointCoord = 50 * counter;
    paint_order.Enqueue(() => buffer.Graphics.DrawImage(i, new 
    Point(pointCoord, 0)));
}