是用
moc = null;
mc = null;
还是用
moc.Dispose();
mc.Dispose();        /// <summary>
        /// 获取网卡信息
        /// </summary>
        /// <returns></returns>
        public static List<string> GetMacAddress()
        {
            try
            {
                //获取网卡硬件地址 
                string mac = "";
                List<string> macList = new List<string>();
                ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
                ManagementObjectCollection moc = mc.GetInstances();
                foreach (ManagementObject mo in moc)
                {
                    if ((bool)mo["IPEnabled"] == true)
                    {
                        mac = mo["MacAddress"].ToString();
                        macList.Add(mac);
                    }
                }
                moc = null;
                mc = null;
                return macList;
            }
            catch
            {
                return null;
            }
            finally
            {
            }        }

解决方案 »

  1.   

    moc= null的意思是让moc不指向任何对象,此时 new ManagementClass()这个真实的对象还在内存中,等待回收(究竟什么时候回收是垃圾回收机制的问题)而moc.Dispose();的意思是销毁 new ManagementClass();这个对象,但仍然指向这个被销毁的对象的地址;所以此时moc是不为null的,但它也无法使用看下我的理解能否对您有所帮助~~
      

  2.   

    用 using
    using(anagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration"))
    {
        using( ManagementObjectCollection moc = mc.GetInstances())
        {
         
        }
    }
    这样你就不用手动去关闭它了,系统会自动把他关闭 。因为手动关闭有的时候会出错的