因此,我从仅使用颜色作为参数创建Pen开始。 除了分配float []之外,我还能用DashPattern做什么?
我尝试使用比较运算符检查它是否为null。结果:OutOfMemoryException。 检查潜在现有分配的长度也失败-相同的例外。
问题开始于尝试使用Buffer.BlockCopy将数据从float [,]行传输到Pen的DashPattern。
答案 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));
}