You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VS2022调试器触发System.ObjectDisposedException(Safe句柄已关闭)求助

.NET 6.0单线程应用VS2022调试时SerialPort封装类触发ObjectDisposedException问题

我在VS2022中开发.NET 6.0单线程应用时遇到了一个奇怪的问题:使用调试器时会随机抛出System.ObjectDisposedException异常,提示信息为Safe handle has been closed. Object name: 'SafeHandle'。

这个异常仅出现在我封装SerialPort的SerialDriver类中,而封装TcpClient的同类实现完全没有这个问题。

示例代码如下:

class SerialDriver
{
    byte[] buf;
    SerialPort port;

    void Connect(); // 内部执行port.Open()及一些读写操作
    void Disconnect(); // 内部执行port.Close()
    int Read(); // 同步读取方法
}

void Main()
{
    SerialDriver s = new SerialDriver("COM5");
    s.Connect();

    // 从这里开始使用调试器就会触发SafeHandle异常,
    // 哪怕是在完全不涉及串口的代码行上。

    for(int i = 0; i < 10; i++)
    {
        int len = s.Read();
        Thread.Sleep(10000);
    }
    s.Disconnect();
}

调试操作对异常触发的影响:

  • 执行“Step Over”或“Step Into”操作,约2-3次点击后触发异常;
  • 在断点间执行“Continue”,约7-10次后触发异常;
  • 无断点或不使用调试器时,不会出现异常。

有没有人遇到过这类和调试器相关的问题?

内容的提问来源于stack exchange,提问作者stevep

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 06:32:08