PerformanceCounter бросает AccessViolationException в мое растерянное лицо - PullRequest
1 голос
/ 08 апреля 2020

Класс памяти

        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.

Я - сбитый с толку банан, пожалуйста, скажите мне, что я делаю неправильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...