none
获取计算机硬件数据出现死锁问题 RRS feed

  • 问题

  • 我写一个函数来获取计算机硬件数据,函数正常返回获取的值.当程序执行后面的代码一分钟多后出现死锁提示.

    我不明白为什么会出现这样的情况,是函数写法的错误还是其他,解决办法是什么(不只获取网卡MAC地址,其他如:CPU ID,硬盘序列号都出现)?

    Public Function GetMacAddress() As String
            Dim MacAddress As String = ""
            Dim mac As ManagementClass = New ManagementClass("Win32_NetworkAdapterConfiguration")
            Dim mac2 As ManagementObjectCollection = mac.GetInstances()
            For Each _mac As ManagementObject In mac2
                If _mac("IPEnabled") Then
                    MacAddress = _mac("MacAddress").ToString()
                    _mac.Dispose()
                End If
            Next
            Return MacAddress
        End Function


    检测到 ContextSwitchDeadlock
    Message: CLR 无法从 COM 上下文 0x1a0dd0 转换为 COM 上下文 0x1a0f40,这种状态已持续 60 秒。拥有目标上下文/单元的线程很有可能执行的是非泵式等待或者在不发送 Windows 消息的情况下处理一个运行时间非常长的操作。这种情况通常会影响到性能,甚至可能导致应用程序不响应或者使用的内存随时间不断累积。要避免此问题,所有单线程单元(STA)线程都应使用泵式等待基元(如 CoWaitForMultipleHandles),并在运行时间很长的操作过程中定期发送消息。


    //------------------------------

    我自己后来找了一个解决办法就是创建一个线程来获取硬件值,完了后线程就停掉.线程都没了应该没地方死锁了吧.
    • 已编辑 前夜 2010年1月27日 13:43 临时解决办法
    2010年1月27日 13:17

答案