【问题标题】:Determine when a stream is closed确定流何时关闭
【发布时间】:2011-04-01 16:36:18
【问题描述】:

我正在尝试使用类似于WebRequest 的接口实现一个网络协议类,特别是使用GetRequestStream 返回的输入流,但是我很难确定请求流何时完成,因为它没有任何事件(处置等)。

如何监控流以确定何时关闭/处置?我唯一的选择是将其包装在实现Stream 的类中吗?


特别是,我正在使用 FtpWebRequest 不具备的某些功能(SITEALLOC 等)实现 FTP。我需要知道数据流何时关闭/完成,以便检查命令流是否有成功或错误消息。

【问题讨论】:

  • 您的目标是检测网络连接何时从远程端关闭?
  • @Jon,本地代码(类的用户)或远程站点没有关闭任何流。在正常使用情况下,它将是本地端处理流(完成发送数据)。
  • 那么 Aliostad 的回答就是正确的。您当然可以自己实现“抱歉,商店已关闭”事件;在更高级别的课程上,这可能比Stream 本身更有意义。
  • @CRoss 考虑一下。为什么没有 .NET 资源(文件流、数据库连接、位图等)公开这样的事件?因为在处理资源时,每个资源都必须有一个所有者,并且该所有者必须显式释放资源(Dispose 模式)。现在所有者可以愉快地实现这样的事件了。

标签: .net events stream


【解决方案1】:

我相信流不提供处置/关闭事件的原因是唯一需要知道的是它的所有者 - 并且所有者会自己调用它。

处理流必须是显式操作,因此事件没有多大意义。话虽如此,流的所有者可以公开一个事件并通知其客户操作结束。

还有一个事件意味着流可以在多个客户端之间共享,我再次认为这不是一个好习惯。

【讨论】:

  • WebRequest 派生类显然实现了这种东西。
  • 再说一次,它是WebRequest,而不是流。 Stream 需要显式处理;现在,如果您正在创建一个等效的 WebRequest,那么您当然可以自己引发一个事件。
猜你喜欢
  • 2015-06-24
  • 1970-01-01
  • 2017-03-29
  • 2012-12-15
  • 1970-01-01
  • 1970-01-01
  • 2021-06-26
  • 1970-01-01
  • 2019-10-01
相关资源
最近更新 更多