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

时间:2015-08-28 16:52:49

标签: c# forms winforms graphics parallel-processing

我有以下事件处理程序:

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)));
}

首次显示表单时,此面板已正确绘制:

Panel showing fine

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

Panel showing big red X

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

ResizeRedraw = true;

这里可能会发生什么?

1 个答案:

答案 0 :(得分:4)

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