C# HttpListener 如果在开始监听后立即停止监听会显示 ObjectDisposeException

问题描述 投票:0回答:1

今天,我正在编写一个使用

.NET Framework 4.8
的框架。我的代码中有一个
HttpListener
,用于从目标网站获取消息,代码运行良好。但是,当我启动侦听器并立即停止它时,它向我显示了
ObjectDisposedException
错误。在这种情况下,我尝试使用单步调试,有趣的是没有任何错误。

在这种情况下,我尝试删除一些代码,这是最小的可重现代码:

HttpListener httpListener = new HttpListener();
httpListener.Start();
httpListener.Stop();

当我运行它时,它会在第3行(

ObjectDisposedException
)显示
httpListener.Stop();
错误,如果你对代码进行堆栈跟踪,它会显示错误将发生在
SafeHandle.cs
的第150行:

throw new ObjectDisposedException(nameof(SafeHandle), SR.ObjectDisposed_SafeHandleClosed);

但是,如果不花费大量时间,我就无法理解那么多代码、发生了什么以及导致该错误的原因,所以我想知道为什么会发生这种情况。

c# .net httplistener objectdisposedexception
1个回答
0
投票

不幸的是我没有真正的解释,但是如果你看一下源代码,你可以看到Stop()方法调用CheckDispose(),它抛出给定的异常,当m_State==State.Closed时。通过调用此值的方法来显式设置状态的唯一方法是方法 Abort()Dispose()。另外,SetupV2Config()Start()中的异常可以强制执行此状态,但也会在几行后抛出

所以这不是您问题的“真正答案”。但至少它显示了何时可能发生此错误,并且也许其他人能够“深入挖掘”或更好地解释为什么使用给定信息会发生此错误。

© www.soinside.com 2019 - 2024. All rights reserved.