使用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。我今晚将对此进行测试并将结果发布。
没有找到相关结果
已邀请:
1 个回复
艾食魄轻县