尝试使用 DrawingContext 进行绘制,但是当我尝试调用 Close() 时,出现 StackOverflowException
Trying to draw using DrawingContext,but when I try calling Close(), a StackOverflowException occurs
我正在尝试在 Canvas 上绘制约 150 个 GeometryDrawing 对象。
我通过将它们添加到 DrawingGroup 来完成此操作。我 Open()
绘图组,添加 GeometryDrawings,使用 DrawingContext
绘制组,然后 Close()
DrawingContext
。我将结果添加到 Image.Source
并将其添加到 canvas.
关闭时,我的应用程序抛出 System.WhosebugException
,我似乎无法找出原因?
internal void Draw(List<GameObject> gameObjects, List<Ray> lighting)
{
DrawingGroup group = new DrawingGroup();
List<GeometryDrawing> geometries = new List<GeometryDrawing>();
geometries.AddRange(Draw(gameObjects));
geometries.AddRange(Draw(lighting));
DrawingContext dc = group.Open();
foreach (GeometryDrawing g in geometries)
{
group.Children.Add(g);
}
dc.DrawDrawing(group);
dc.Close();
Image image = new Image();
image.Width = 800;
image.Height = 500;
DrawingImage di = new DrawingImage(group);
image.Source = di;
Canvas.SetTop(image, 0);
Canvas.SetLeft(image, 0);
canvas.Children.Add(image);
}
WhosebugException 的原因是
dc.DrawDrawing(group);
将 group
添加到它自己的 Children
集合中,导致无限递归。
您正在混合填充 DrawingGroup 的子项的方法。 要么直接将绘图添加到Children
集合要么使用 DrawingContext 来填充集合,但不能同时进行。
这应该有效:
using (var dc = group.Open())
{
foreach (var g in geometries)
{
dc.DrawDrawing(g);
}
}
或者根本不使用 DrawingContext:
foreach (var g in geometries)
{
group.Children.Add(g);
}
我正在尝试在 Canvas 上绘制约 150 个 GeometryDrawing 对象。
我通过将它们添加到 DrawingGroup 来完成此操作。我 Open()
绘图组,添加 GeometryDrawings,使用 DrawingContext
绘制组,然后 Close()
DrawingContext
。我将结果添加到 Image.Source
并将其添加到 canvas.
关闭时,我的应用程序抛出 System.WhosebugException
,我似乎无法找出原因?
internal void Draw(List<GameObject> gameObjects, List<Ray> lighting)
{
DrawingGroup group = new DrawingGroup();
List<GeometryDrawing> geometries = new List<GeometryDrawing>();
geometries.AddRange(Draw(gameObjects));
geometries.AddRange(Draw(lighting));
DrawingContext dc = group.Open();
foreach (GeometryDrawing g in geometries)
{
group.Children.Add(g);
}
dc.DrawDrawing(group);
dc.Close();
Image image = new Image();
image.Width = 800;
image.Height = 500;
DrawingImage di = new DrawingImage(group);
image.Source = di;
Canvas.SetTop(image, 0);
Canvas.SetLeft(image, 0);
canvas.Children.Add(image);
}
WhosebugException 的原因是
dc.DrawDrawing(group);
将 group
添加到它自己的 Children
集合中,导致无限递归。
您正在混合填充 DrawingGroup 的子项的方法。 要么直接将绘图添加到Children
集合要么使用 DrawingContext 来填充集合,但不能同时进行。
这应该有效:
using (var dc = group.Open())
{
foreach (var g in geometries)
{
dc.DrawDrawing(g);
}
}
或者根本不使用 DrawingContext:
foreach (var g in geometries)
{
group.Children.Add(g);
}