访问WMI中的处理器数量

时间:2012-03-16 14:20:49

标签: c# wmi

我在这里看了很多关于WMI的帖子,但我仍然遇到了一些麻烦。我想从WMI中检索CPU使用情况,我的查询检索ManagementObjectSearcher提供的所有内容,但它返回null并且从不提取任何信息。

另外,对于我要拉的数据类型,我应该使用int16吗?

希望有人可以对此有所了解并在途中发送给我。感谢。

public void GetPhysicalMemory()
{
    ManagementObjectSearcher mgtObj = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_ComputerSystem");   // Win32_OPeratingSystem");
    ManagementObjectCollection mgtColl = mgtObj.Get();

   // foreach (ManagementObject obj in  mgtObj.Get())
    if (mgtColl.Count != 0 )
    {
        foreach (ManagementBaseObject mgtBaseObj in mgtColl)
        {
            var[] data = mgtBaseObj["NumberOfProcessors"] as int16[];

            if (data != null)
            {
                Console.WriteLine(data);
            }
            else
            {
                Console.WriteLine("Collection = null");
                Console.Read();
                Console.Read();

            }
        }
    }

1 个答案:

答案 0 :(得分:0)

您可以使用ManagementObjectSearcher.Get变量直接遍历ManagementObject方法返回的集合,从这里您可以访问您可以使用item属性或通过[]表示法访问每个属性。

检查此示例应用程序。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Management;
using System.Text;

namespace ConsoleFoo
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                ManagementObjectSearcher mgtObj = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_ComputerSystem");
                foreach (ManagementObject item in mgtObj.Get())
                {
                    Console.WriteLine("Number Of Processors  {0}", item["NumberOfProcessors"]);
                }
            }
            catch (ManagementException e)
            {
                Console.WriteLine("Exception {0} ", e.Message);
            }
            Console.ReadKey();
        }
    }
}