使用 ManagementObjectSearcher 时检测到 DisconnectedContext

2024-04-26

我在 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 为止。

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


I found MSDN 上的一篇文章概述了一个非常相似的问题 http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/20f46b55-6ffe-4961-b301-636e062029b6/。那家伙说:

抱歉,别浪费时间了。当代码在简单的控制台应用程序中运行时,它可以正常工作。当在 Windows 窗体中调用它来响应 DriveDetectorEvent 时,就会出现问题。

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


编辑和可能的解决方案:基于以下答案在单线程应用程序中调用 WMI 函数时 DisconnectedContext MDA https://stackoverflow.com/questions/3921661/disconnectedcontext-mda-when-calling-wmi-functions-in-single-threaded-application/5657777#5657777我认为这里的解决方案是调用GetPortName()在 WndProc 之外。今晚我将对此进行测试并发布我的结果。


阅读答案后在单线程应用程序中调用 WMI 函数时 DisconnectedContext MDA https://stackoverflow.com/questions/3921661/disconnectedcontext-mda-when-calling-wmi-functions-in-single-threaded-application/5657777#5657777看来我的代码不起作用的原因是它是从 WndProc 调用的,阻塞了 WndProc。这会导致问题,因为编组需要泵送消息......但我已经阻止了。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 ManagementObjectSearcher 时检测到 DisconnectedContext 的相关文章

  • 如何在 vb.net 中更改 DateTimePicker 的日期格式

    如何更改 vb net 中 DateTimePicker 的日期格式 以便日期以 dd mm 1990 格式显示 没有任何时间值 我尝试将格式更改为 短 虽然这提供了我需要的日期格式 但它不会删除时间 您需要将 DateTimePicker
  • java:使用2个线程打印奇偶数

    我正在尝试交替使用 2 个不同的线程打印奇数和偶数 我能够使用等待 通知和同步块来实现它 但现在我想评估我们是否可以在不使用等待 通知和同步的情况下实现它 以下是我的代码 但它不起作用 public class OddEvenUsingAt
  • Pygame - 如何使 hitbox 与敌人的移动一起工作?

    我正在用 Pygame 制作一个 Python 游戏 目前正在研究 hitbox 程序应该暂停 设置play False 每当玩家与敌人碰撞时 只有当我注释掉所有敌人的移动 第 56 64 行 时它才 有效 但这显然不是最好的选择 我读过有
  • C# 是否可以中断 ThreadPool 内的特定线程?

    假设我已将一个工作项排入队列ThreadPool 但是如果没有要处理的数据 从BlockingQueue 如果队列为空并且队列中不再有工作 那么我必须调用Thread Interrupt方法 如果我想中断阻塞任务 但是如何用 a 做同样的事
  • 如何使用 Python 从 Azure Functions 中的辅助线程重定向日志

    我正在使用 Azure 函数运行启动多个线程的 Python 脚本 出于性能原因 一切都按预期工作 但 Azure Functions 日志中仅显示来自 main 线程的信息日志 我在 main 中启动的 辅助 线程中使用的所有日志都不会出
  • 双重检查锁定模式

    In 有伪代码来正确实现作者建议的模式 见下文 Singleton Singleton instance Singleton tmp pInstance insert memory barrier 1 if tmp 0 Lock lock
  • 安装文件失败调试已启用

    我之前使用过安装项目 没有任何问题 该项目没有 SQLite DB 作为依赖项我现在正在尝试为一个包含 SQLite 作为 System Data SQLite Core 的项目制作一个 EXE 或 msi 文件 该项目是一个带有 WPF
  • 如何管理循环器和线程(线程不再消亡!)

    我创建了一个扩展 Thread 的类 以通过非 ui 线程中的 LocationManager 检索用户位置 我将其实现为一个线程 因为它必须根据请求启动并仅在有限的时间内完成其工作 顺便说一句 我必须在线程中添加一个 Looper 对象
  • 如何在.NET中扩展环境变量%CommonProgramFiles%\system\

    我遇到一种情况 我需要通过读取注册表设置来返回目录路径 注册表值返回我以下格式的路径 CommonProgramFiles System web32 dll 而消费者代码期望它的格式为 C Program Files Common File
  • 为什么 VB.NET 和 C# 中针对值检查 null 存在差异?

    In VB NET http en wikipedia org wiki Visual Basic NET有时候是这样的 Dim x As System Nullable Of Decimal Nothing Dim y As System
  • Android进程调度

    我试图更好地理解 以便在创建 Android 应用程序 服务时确定潜在的互操作性问题对可靠性的影响 我想弄清楚进程优先级是如何确定的 服务和活动之间优先级的差异以及调度程序是否以不同方式对待它们的优先级 基本上 我试图深入了解某个活动或服务
  • 没有公平性的DelayQueue有问题吗?

    在 Java 7 中 DelayQueue 的实现使用没有公平策略的 ReentrantLock 从长远来看 这是一个问题吗 线程会因此而饿死吗 Thanks 如果您考虑ScheduledThreadPoolExecutor 或任何其他生产
  • 摆脱潜在的僵局

    我遇到了看似僵局 死锁听起来是不是有点像 无法关闭窗口 如果 IDE 上没有终止按钮 则无法终止 空白 什么也没有发生 没有任何异常或错误 如果这些是在僵局中发生的事情 那么我可能已经解决了一半的问题 我知道有两个线程正在运行 AWT Ev
  • Powershell 设置盖子关闭操作

    我想自动设置 Windows 7 在我的工作笔记本电脑上合上盖子时所执行的操作 因为每次登录时都会通过 GPO 重置该操作 我知道我可以在批处理脚本中使用 powercfg 命令来实现此目的 powercfg setacvalueindex
  • 硬件线程与软线程?

    我读过 在多核处理器中 每个核心包含 2 个硬件线程 例如在双核处理器中 有 4 个硬件线程正在运行 现在 如果我在 Java 中创建 2 个线程 这些线程是否会映射到 2 个硬件线程 或者这 2 个 Java 线程由特定核心的单个硬件线程
  • 判断线程是否已经启动

    如何判断Python线程是否已经启动 有一个方法is alive 但这是真的before and while一个线程正在运行 你可以看看ident领域的Thread实例 这Python 2 7 线程文档 http docs python o
  • 为什么 std::atomic 比 volatile bool 慢很多?

    多年来我一直使用 volatile bool 来控制线程执行 并且效果很好 in my class declaration volatile bool stop In the thread function while stop do th
  • Android同步onSensorChanged?

    这是我的问题的后续 Android线程可运行性能 https stackoverflow com questions 36395440 android thread runnable performance 我在理解应用程序的同步方法时遇到
  • 监控 Java 应用程序上的锁争用

    我正在尝试创建一个小基准 在 Groovy 中 以显示几个同步方法上的高线程争用 当监控自愿上下文切换时 应该会出现高争用 在 Linux 中 这可以通过 pidstat 来实现 程序如下 class Res private int n s
  • C#“var”关键字在 VB.NET 中的等价物是什么?

    例如 我如何获得 VB NET静态类型局部变量是static赋值右侧的表达式的类型 像这样 Dim http msdn microsoft com en us library 7ee5a7s1 aspx我的变量 3 你还需要 选项推断 ht

随机推荐

  • Ember Data 未找到模型,但它显然存在

    我和其他许多人一样将我的 ember 应用程序升级到了最新版本 但升级后 我的应用程序仍然无法工作 我已经简化了很多 这归结为我的路线 我的路线是这样的 按照过渡指南中的建议 App BoxesRoute Ember Route exten
  • c++ pthread - 如何使地图访问线程安全?

    我有一个映射作为成员变量和多个访问该映射的线程 读写访问 现在我必须确保只有一个线程可以访问该地图 但我该如何点呢 最好的解决方案是什么 Boost 包含一些用于共享访问的很好的锁实现 看看文档 http www boost org doc
  • Google Play 游戏服务 - 未显示解锁成就弹出窗口

    当我解锁成就时 成就已解锁 弹出窗口不会弹出 但成就已解锁 正如我在成就列表中看到的那样 我已经尝试过了this https stackoverflow com a 26474719 2543285解决方案 但它不起作用 我在 MainAc
  • 将 JSON 数据从 php 传递到 html-data 属性,然后传递到 Javascript

    我正在创建一个插件 用户可以在其中添加自定义设置data HTML 中的属性 设置采用 JSON 格式 我在 Javascript 中使用这些设置 它有preview base and paths特性 preview and base有字符
  • Zurb Foundation:如何在调整大小到较小的屏幕时使按钮变小?

    在 Zurb Foundation 4 中 是否有一种方法可以在浏览器尺寸调整得较小或在较小的屏幕上时自动切换到较小的按钮样式 例如 当屏幕是标准桌面屏幕时 请执行以下操作 a href class primary button Butto
  • 计算具有特定子集大小的集合分区

    给定一组n元素 我需要找到该集合的所有分区k大小几乎相等的子集 例如 对于一个包含 7 个元素和 3 个子集的集合 我只需要其中有两个子集 每个子集包含 2 个元素 和一个子集包含 3 个元素的分区 我不想要一个包含 1 2 和 4 个元素
  • Visual Studio Javascript 断点未命中,为什么?

    可以为 javascript 代码块设置断点 如下图所示 我们如何使用它们 VS总是忽略 如果调试时将 Internet Explorer 设置为浏览器 理论上 Visual Studio 能够在客户端脚本设置的断点处停止 要使用该功能 您
  • Java Diffie-Hellman 密钥交换

    我正在尝试执行代码来执行 Diffie Hellman 密钥交换 我从网上的一个示例中获取了代码 现在忘记在哪里了 我必须导入 bouncycastle jar 我认为它在执行之前一直有效 my code package testproje
  • Golang - 如何在特定时间执行函数

    我需要在一天中的特定时间运行一个函数 例如 0010 0610 1210 1810 我目前的方法使用自动收报机for range time Tick 21600 time Second 我以这些时间间隔之一 例如 1210 手动启动该程序
  • C:如何将多位数分解为单独的变量?

    假设我在 C 中有一个多位整数 我想将它分解为一位数整数 123会变成1 2 and 3 我该如何做到这一点 特别是如果我不知道整数有多少位 int value 123 while value gt 0 int digit value 10
  • 如何在 openpyxl 进行更改时观察 Excel 文件更改

    我构建了一个 iOS 应用程序 它接受用户的输入 然后将其数据作为 csv 文件上传到 dropbox 现在 我想构建一个跨平台桌面应用程序 使用 openpyxl 和 Python dropbox api 来侦听这些 csv 上传 然后将
  • 如何在 Windows 中为高级网络适配器属性设置巨型数据包和接收/传输缓冲区?

    我正在尝试为网络适配器设置一些高级属性 例如巨型数据包 接收 发送缓冲区 我尝试使用 Win32 NetworkAdapter Win32 NetworkConnection Win32 NetworkAdapterConfiguratio
  • fab风格钻石如何使用?

    How to use diamond style for fab bottom app bar In the sketch files on the website https material io tools theme editor
  • 如何使用 powershell 以编程方式查找用户 HKEY_USERS 注册表项?

    我想知道如果您知道本地计算机上该用户的登录名 是否有办法在 HKEY USERS 中找到该用户的注册表项 我想以编程方式将内容添加到特定用户的注册表项 例如自动运行 但我只知道用户名 如何确定 HKEY USERS 中的哪些神秘用户实际上属
  • 如何在 Kaxaml 中引用不同的 DLL

    我想在 Kaxaml 中使用 DataGrid 如何引用工具包 dll Copy WPFToolkit dll to C Program Files Kaxaml 重新启动 Kaxaml 现在你可以使用这样的命名空间 xmlns dg cl
  • 三.js Raycaster intersectObjects

    我正在尝试修改这个例子 https github com timoxley threejs blob master examples webgl morphtargets md2 control html来自 Three js 通过鼠标点击
  • 错误:没有匹配的函数可供调用

    我在代码中收到 没有匹配的函数来调用错误 该代码在另一个类的构造函数中创建一个类的实例 代码如下 inline DiscriminatorContainer DiscriminatorContainer ushort id FebPtr f
  • 可以在 swift 中创建静态分配的数组吗?

    我想在 swift 中创建一个结构体 它有少量固定数量的值 比如 16 个浮点数 作为实例数据 要求该结构体不将这些值存储在堆上 以便结构体实例的地址就是实例变量的地址 还要求这些值可以通过下标在结构内部访问 就像数组一样 在 C 语言中
  • 验证 Rails 中多个属性之一是否存在

    在多语言应用程序中 用户可以输入自己的中文和英文姓名 用户可以输入其中之一或两者 但必须至少输入一个名称 class Person lt ActiveRecord Base validates zh name presence gt tru
  • 使用 ManagementObjectSearcher 时检测到 DisconnectedContext

    我在 WndProc 覆盖中使用以下函数 Public Function GetPortName As String Dim portNameData As String Dim comPortNumber As String Try Di