私は粗マップを作成するためにオブジェクトのリストをビットマップに描画する関数を持っています。コード分析は、オブジェクト 'drawPen'がすべての例外パスに沿って配置されていないという警告(CA2000)をスローします。限り、私はそれが機能の最後に配置され、それが見逃す可能性のあるアクセスできないコードがないことがわかります。使い捨てオブジェクトで正しく処分されないDispose
コンパイラがそれが適切に処理されていないと思う理由を知っている人はいますか?
public void drawUpdates(List<areaObjects> objectLocations)
{
Rectangle areaToClone = new Rectangle(0, 0, writeOnceMap.Width, writeOnceMap.Height);
var pixelFormat = writeOnceMap.PixelFormat;
areaBitMap = writeOnceMap.Clone(areaToClone, pixelFormat);
Pen drawPen = new Pen(Color.Black, 2);
drawPen.Width = 2;
foreach(areaObjectsop2d in objectLocations)
{
int xPosition = (int)(op2d.XYZ.xPos * mapScale);
int yPosition = (int)(op2d.XYZ.yPos * mapScale);
Point[] crossMarker = getCrossShape(xPosition, yPosition);
using (var graphics = Graphics.FromImage(areaBitMap))
{
graphics.DrawPolygon(drawPen, crossMarker);
}
}
drawPen.Dispose();
}
あなたのアプリがペンが破棄される前に例外的に処理することはできませんので、 'use(var drawpen = new Pen())'を使用するか、try catchでコードをラップしてペンを処分する – Charleh