【问题标题】:DisconnectedContext was detected when using ManagementObjectSearcher使用 ManagementObjectSearcher 时检测到 DisconnectedContext
【发布时间】:2011-04-14 00:35:09
【问题描述】:

我在 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 组件上的请求提供服务。这可能会导致损坏或数据丢失。为避免此问题,请确保所有上下文/单元都保持活动状态,直到应用程序完全使用 RuntimeCallableWrapper 完成,这些 RuntimeCallableWrapper 代表生活在其中的 COM 组件。

我认为这是某种线程问题。如何从表单中调用此函数以不发生此错误?


我找到了a post on MSDN outlining a very similar problem problem。那家伙说:

对不起,不要浪费你的时间。该代码在简单的控制台应用程序中运行时运行良好。当它在响应 DriveDetectorEvent 的 Windows 窗体中被调用时,就会出现问题。

我希望我能弄清楚 Forms 应用程序有什么不同。


编辑和可能的解决方案:根据DisconnectedContext MDA when calling WMI functions in single-threaded application 的答案,我认为这里的解决方案是在WndProc 之外调用GetPortName()。今晚我将对此进行测试并发布我的结果。

【问题讨论】:

    标签: vb.net multithreading wmi


    【解决方案1】:

    在阅读DisconnectedContext MDA when calling WMI functions in single-threaded application 的答案后,似乎我的代码不起作用的原因是它是从 WndProc 调用的,从而阻塞了 WndProc。这会导致问题,因为编组需要发送消息……但我已阻止。

    出于我的目的,只需在计时器上进行扫描即可。您可能必须找到另一种解决方案,例如在另一个线程上异步调用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-10
      • 2015-07-24
      • 1970-01-01
      • 2019-05-31
      • 1970-01-01
      相关资源
      最近更新 更多