使用ManagementObjectSearcher时检测到DisconnectedContext

| 我在WndProc替代中使用以下功能:
Public Function GetPortName() As String
    Dim portNameData As String
    Dim comPortNumber As String

    Try
        Dim portSearcher As New ManagementObjectSearcher(\"\\root\\CIMV2\", \"Select Name, PNPDeviceID from Win32_PnPEntity\")
        For Each port As System.Management.ManagementObject In portSearcher.Get()

            If port(\"Name\").ToString.ToUpper.Contains(\"(COM\") Then
                portNameData = port(\"Name\").ToString
                comPortNumber = port(\"Name\").ToString.Substring(port(\"Name\").ToString.IndexOf(\"(COM\") + 4)
                comPortNumber = comPortNumber.TrimEnd(\")\"c)
                If port(\"PNPDeviceID\").ToString.ToUpper.StartsWith(\"USB\\VID_1234&PID_1234\") Then
                    Return \"COM\" & comPortNumber
                End If
            End If
        Next
    Catch ex As Exception
    End Try

    Return \"\"
End Function
该功能工作正常,但是我现在正在通过表单在新应用程序中使用它。在For循环的每次迭代中(在
For Each port As System...
行上),我得到以下消息:   检测到DisconnectedContext      上下文0x607fd8已断开连接。没有代理将用于服务COM组件上的请求。这可能会导致损坏或数据丢失。为避免此问题,请确保所有上下文/单元都保持活动状态,直到使用代表其中包含的COM组件的RuntimeCallableWrappers完全完成应用程序为止。 我认为这是某种线程问题。如何以不发生此错误的方式从表单调用此函数? 我在MSDN上找到了一篇帖子,概述了一个非常类似的问题。那家伙说:   抱歉,请不要浪费时间。在简单的控制台应用程序中运行时,代码可以正常工作。当它以Windows形式响应DriveDetectorEvent调用时出现了问题。 我希望我能弄清楚Forms应用程序中的不同之处。 编辑和可能的解决方案:基于在单线程应用程序中调用WMI函数时DisconnectedContext MDA的答案,我认为这里的解决方案是在WndProc之外调用ѭ2。我今晚将对此进行测试并将结果发布。     
已邀请:
在单线程应用程序中调用WMI函数时,在DisconnectedContext MDA上阅读了答案之后,似乎我的代码不起作用的原因是正在从WndProc调用它,从而阻止了WndProc。这会引起问题,因为封送处理需要发送消息...但是我已阻止。 就我的目的而言,只需扫描计时器即可。您可能必须找到其他解决方案,例如在另一个线程上异步调用它。     

要回复问题请先登录注册