我可以用Pen.DashPattern做更多的事情吗?

时间:2019-01-17 00:03:32

标签: c# .net winforms

因此,我从仅使用颜色作为参数创建Pen开始。 除了分配float []之外,我还能用DashPattern做什么?

我尝试使用比较运算符检查它是否为null。结果:OutOfMemoryException。 检查潜在现有分配的长度也失败-相同的例外。

问题开始于尝试使用Buffer.BlockCopy将数据从float [,]行传输到Pen的DashPattern。

1 个答案:

答案 0 :(得分:1)

此行为是设计使然。

如果您没有指定与默认 DashStyle.SolidColor 不同的DashStyle或将Pen.DashPattern设置为float[]值,请设置,结果,从Pen.DashStyle DashStyle.Custom ,未设置Pen.DashPattern,原生的 GdipGetPenDashCount 方法将被设置返回Status != GDIP.Ok = 0

未设置破折号时的默认行为是引发GDI +异常,在这种情况下为 OutOfMemoryException

您可以做的是测试笔DashStyle并尝试仅在DashPattern时获得它的DashStyle != DashStyle.Solid(明确设置此样式不会创建DashPattern) :

if (pen.DashStyle != DashStyle.Solid)
{
    Console.WriteLine(pen.DashStyle);
    pen.DashPattern.ToList().ForEach(f => Console.WriteLine(f));
}