Загрузка ЦП% NotifyIcon Использование WMI
Я пытался создать иконку в трее на панели задач, которая отображает использование процессора (вытащил из wbemtest
если возможно) когда завис над или нажал на C#
, Я использовал PercentProcessorTime
Имя из ManagementClass
Win32_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 {
}
}
}