Класс памяти
static PerformanceCounter MemoryUsageCounter = new PerformanceCounter
{
CategoryName = "Memory",
CounterName = "Available MBytes"
};
static int CurrentMemory = 16317;
static int CurrentUsage;
public static string[] ReturnUsage()
{
CurrentUsage = Convert.ToInt32(CurrentMemory - Math.Round(MemoryUsageCounter.NextValue()));
float usage = CurrentMemory - CurrentUsage;
double percent = (usage / CurrentMemory) * 100;
return new string[] { $"{CurrentUsage.ToString()}MB", $"{Math.Round(percent).ToString()}%" };
}
UserControl
private void Paint(object sender, PaintEventArgs e)
{
string[] mem = Memory.ReturnUsage();
e.Graphics.DrawString(mem[0], new Font(new FontFamily("Exo 2.0 Medium"), 8, FontStyle.Bold), new SolidBrush(Color.FromArgb(170, Color.White)), 53, 22);
e.Graphics.DrawString(mem[1], new Font(new FontFamily("Exo 2.0 Medium"), 8, FontStyle.Bold), new SolidBrush(Color.FromArgb(100, Color.White)), 53, 33);
}
Метод в классе Memory вызывается из пользовательского элемента управления. Вернуть использование памяти в МБ и%. Я поместил этот пользовательский элемент управления в панель, которая находится в моей форме. Попытка получить NextValue()
через ReturnUsage();
дает мне AccessViolationException, и я не понимаю, почему.
Подождите, вот еще: вызов этого же метода через string a = ReturnUsage()[0];
в коде основной формы, прежде чем вызывать его внутри пользовательский контроль как-то исправляет эту ошибку go.
Я - сбитый с толку банан, пожалуйста, скажите мне, что я делаю неправильно.