0

我已经四处寻找了一段时间,试图找到这个问题的答案,但我根本无法将我的头绕在读/写内存上。我认为读/写内存更适合 C++,因为你在那里管理它,因为 C# 通常会处理它。尽管如此,下面是我创建的名为DrawLevelCard的函数的 pastebim 链接。这样做的目的是为我的不和谐制作一张等级卡。问题是有时它会在以下行引发错误:

var measure3 = gr.MeasureString(" / " + ExpNeeded + " Exp", Levelfont);

错误: An unhandled exception of type 'System.AccessViolationException' occurred in System.Drawing.Common.dll Attempted to read or write protected memory. This is often an indication that other memory is corrupt.

这不会发生在任何其他行上,如果我将它全部删除,没有它我将无法复制它。问题是这对于我设置图像的方式有点必要。PasteBin:https ://pastebin.com/ab00GLLs

卡片图片供参考: https ://i.imgur.com/q7nz2K6.png

更新:如果有人需要额外信息,这是完整的课程:) https://pastebin.com/Bbi7zt2b

4

1 回答 1

0

感谢@MitchWheat的回复,我想我设法找到了解决方案。如果结果属实,我会批准这个解决方案。我认为这是由于GetFontName()多次向集合中添加字体文件造成的。这是我之前完全忘记修复的问题。

我多次调用它,如果它当前正在被读取,那么它可能会标记

        private static Font GetFontName(float msSize)
        {
            PrivateFontCollection collection = new PrivateFontCollection();
            collection.AddFontFile(@".\Fonts\Tommy Soft Regular.otf");
            FontFamily fontFamily = new FontFamily("MADE Tommy Soft", collection);
            return new Font(fontFamily, msSize);
        }

更新:不知何故,我设法解决了这个问题,而不是将函数设置为变量,而是将函数设置为在每次运行测量字符串时运行。 var measure3 = gr.MeasureString(" / " + ExpNeeded + " Exp", GetFontName(16)); 我不知道为什么这解决了这个问题,甚至不知道它是否完全解决了这个问题。如果问题再次出现,我将确保更新此帖子。希望有人能给我和其他人一些关于为什么会发生这种情况的见解。

如果有人想比较它们,这是更新的课程:https ://pastebin.com/r92zKjhW

于 2020-09-03T04:23:10.370 回答