gpt4 book ai didi

c# - 如何在 C# 中捕获 'FatalExecutionEngineError'?

转载 作者:行者123 更新时间:2023-11-30 17:42:48 35 4
gpt4 key购买 nike

我正在用 C# 例程试验一个我无法解决的乏味问题。我正在开发一个应用程序,它使用 GDAL 库(一个用 C++ 编写的 DLL 库来操作地理数据)打开 ESRI ShapeFile,并在 PictureBox 组件中显示 map 。当我使用 System.Drawing.Point 对象的矢量绘制多边形时,我收到以下消息:

托管调试助手“FatalExecutionEngineError”在“C:\Users\polli\ipeageo-git\IpeaGEO\bin\Debug\IpeaGEO.vshost.exe”中检测到问题。附加信息:运行时发现 fatal error 。错误地址是 0x6ced9a0f,在线程 0x1618 中。错误代码为 0xc0000005。

这是抛出异常的代码:

private void drawGeometry(Geometry geo, Graphics g, bool fill)
{
// Some code here...
// ...

// Get the points count and the array to ask GDAL for coordinates.
int count = geo.GetPointCount();
double[] v = new double[2];
Point[] polygon = new Point[count];

for (int pid = 0; pid < count; pid++)
{
geo.GetPoint(pid, v); // This is a call to GDAL (unmanaged) code.
polygon[pid].X = getX((float)v[0]);
polygon[pid].Y = getY((float)v[1]);

// The Exception occurs just HERE!
g.DrawPolygon(fgPen, polygon); // <--- EXCEPTION!!!
if (fill) g.FillPolygon(fillBrush, polygon);
}

// Some code here...
// ...
}

这个函数的另一个版本运行良好,我在不分配内存的情况下绘制每条线段:

private void drawGeometry(Geometry geo, Graphics g, bool fill)
{
// Some code here...
// ...

Point start = new Point(), current = new Point(), previous = new Point();

// Get the points count and the array to ask GDAL for coordinates.
int count = geo.GetPointCount();
double[] v = new double[2];

for (int pid = 0; pid < count; pid++)
{
geo.GetPoint(pid, v); // This is a call to GDAL (unmanaged) code.
if (pid == 0)
{
start.X = previous.X = getX((float)v[0]);
start.Y = previous.Y = getY((float)v[1]);
} // if
else
{
previous.X = current.X;
previous.Y = current.Y;
} // else

current.X = getX((float)v[0]); current.Y = getY((float)v[1]);
g.DrawLine(fgPen, previous.X, previous.Y, current.X, current.Y);
} // for
g.DrawLine(fgPen, start.X, start.Y, current.X, current.Y);

// Some code here...
// ...
}

我需要填充一些多边形,但我无法使用第二版代码(工作正常)来完成。使用 try ... catch 不会捕获异常。

我认为当垃圾收集器 在后台运行并且我尝试访问多边形变量(这是一个包含大约 2000 个元素的向量...并且此代码位于for 语句)。

有人知道如何捕获(或者更好地避免)这种异常吗?

最佳答案

FatalExecutionEngineError 在异常处理中无法捕获,它们通常是系统错误或编码错误,两者都无法在 .NET 应用程序中处理。

关于c# - 如何在 C# 中捕获 'FatalExecutionEngineError'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31612256/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com