Загрузка ЦП% NotifyIcon Использование WMI

Я пытался создать иконку в трее на панели задач, которая отображает использование процессора (вытащил из wbemtest если возможно) когда завис над или нажал на C#, Я использовал PercentProcessorTime Имя из ManagementClassWin32_PerfFormattedData_Counters_ProcessorInformation вытащить данные. Я не смог найти, какой тип данных Имя даже должно возвращать. Могу ли я получить данные где-нибудь еще?

public void CPUactivitythread()
    {
        //Create a management object to open wbemtest
        ManagementClass CPUdataclass = new ManagementClass("Win32_PerfFormattedData_Counters_ProcessorInformation");

        try
        {
            //While Loop to pull consistent data from the CPU
            while (true)
            {
                //Connect to the CPU Performance Instances in wbemtest
                ManagementObjectCollection CPUobjectCollection = CPUdataclass.GetInstances();

                foreach (ManagementObject obj in CPUobjectCollection) {
                    //Check that the "PercentProcessorTime" instance is there
                    if (obj["Name"].ToString() == "PercentProcessorTime")
                    {
                        if (Convert.ToUInt64(obj["PercentProcessorTime"]) > 0)
                        {
                            cPUUsageToolStripMenuItem.Text = (obj["PercentProcessorTime"]).ToString();
                            CPUoutputLabel.Text = (obj["PercentProcessorTime"]).ToString();
                        }
                        else
                        {

                        }
                    }
                }
                Thread.Sleep(1000);
            }
        }

1 ответ

Решение

Объекты в Коллекции соответствуют Информации о ЦП диспетчера задач, по одному для каждого ЦП, по одному для Всего с именем "_Total". PercentProcessorTime - это свойство каждого объекта производительности. Поскольку вы получаете отформатированные данные, они уже рассчитаны ("приготовлены") в соответствии с формулой производительности и могут использоваться напрямую. LINQPad - действительно полезный инструмент для изучения объектов, если вы не любите читать документацию:)

Попробуй это:

ManagementClass CPUdataclass = new ManagementClass("Win32_PerfFormattedData_Counters_ProcessorInformation");

try {
    //While Loop to pull consistent data from the CPU
    while (true) {
        //Connect to the CPU Performance Instances in wbemtest
        ManagementObjectCollection CPUobjectCollection = CPUdataclass.GetInstances();

        foreach (ManagementObject obj in CPUobjectCollection) {
            //Check that the "PercentProcessorTime" instance is there
            if (obj["Name"].ToString() == "_Total") {
                var PPT = Convert.ToUInt64(obj.GetPropertyValue("PercentProcessorTime"));
                if (PPT > 0) {
                    cPUUsageToolStripMenuItem.Text = PPT.ToString();
                    CPUoutputLabel.Text = PPT.ToString();
                }
            }
            else {

            }
        }
    }
Другие вопросы по тегам