使用 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 来解决它。
我有以下事件处理程序:
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 来解决它。