问题描述
我已经四处寻找试图解决这个问题的方法了,但实际上根本无法将我的头放在读取/写入内存上。我以为C ++的读/写内存更多,因为您可以在c#通常负责的地方进行管理。不过,下面是我创建的名为 DrawLevelCard 的函数的粘贴链接。这样做的目的是为我的不和谐行为打平卡。问题是有时它会在显示以下内容的行上引发错误:
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
解决方法
由于@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