0

有时http连接没有成功关闭util应用程序在Windows 8 Metro应用程序中退出,有没有人有好的解决方案来关闭http连接?

下面的文档中有一个System.Net.HttpWebResponse的Close方法,但是我在编码时找不到它,System.IO.Stream中也没有Close方法但文档中存在。

System.Net.HttpWebResponse

System.IO.Stream

4

1 回答 1

0

并非所有版本的 .Net Framework 都支持所有方法(或类)。如果您查看HttpWebResponse Class的文档,您将看到这些方法(以及其他方法):

httpwebresponse 方法

每个方法的名称前都有一个符号:

无所不在   表示该方法是公开的;暗示该方法可用于使用完整版 .Net Framework 的项目中。
使用 pcl   表示该方法可用于可移植类库项目。
使用 w8 应用程序   表示该方法可用于Windows 应用商店项目。

您会注意到CloseCreateObjRef方法仅在使用完整版 .Net Framework 的项目中可用。该Dispose方法可用于所有三种 .Net 项目(完整的 .Net Framework、可移植类库和 Windows 应用商店)。

要回答有关正确“关闭”每个班级的问题:

对于HttpWebResponse实现的类IDisposable,您可以使用using. 这是 ac# 示例,但 VB.Netusing也支持。

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://127.0.0.1");
using (HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync())
{
    // Do something with response object.
    response.DoSomething();
    ...

    // End of "using" block automatically calls "response.Dispose()" 
}

using语句将确保Dispose()在代码块的末尾调用。这将清理response对象。

至于清理Stream对象 - 它也实现了IDisposable,这意味着您也可以使用using它。我也使用Flush,只是为了安全起见:

using (Stream myStream = /* create stream */)
{
    // Do something with stream
    myStream.DoSomething();
    ...

    // Done using stream. Flush it.
    myStream.Flush();
    // End of "using" block automatically calls "myStream.Dispose()" 
}

更多关于 MSDN 上的using 声明

于 2013-09-06T14:55:20.057 回答