使用 Parallel 绘制窗体面板时出现问题

Trouble when painting a Form's Panel using Parallel

我有以下事件处理程序:

private void drawingPanel_Paint(object sender, PaintEventArgs e)
{
    Graphics graphics = e.Graphics;

    //gridSize = 8
    float cellWidth = (float)drawingPanel.Width / (float)gridSize;
    float cellHeight = (float)drawingPanel.Height / (float)gridSize;

    Parallel.For(0, gridSize, y =>
       Parallel.For(0, gridSize, x =>
           graphics.DrawRectangle(Pens.Black, (float)x * cellWidth, (float)y * cellHeight, cellWidth, cellHeight)));
}

当表单首次出现时,此面板已正确绘制:

但是当我调整表格大小时,会发生这种情况:

我的表单构造函数中有以下行:

ResizeRedraw = true;

这里可能发生了什么?

绘图应该发生在与 UI 线程相同的线程上。通过使用 Parallel,您 运行 每次迭代都在另一个线程中进行。这是预期的 bahviour,您可以使用正常的 for 来解决它。