win10
vs2019(v16.3.6)
.netFramework4.8代码:
using System;
using System.Net;namespace HttpDownloadTest
{
internal static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
private static void Main()
{
HttpDownload();
} private static void HttpDownload()
{
//一个可以下载的东西 试过jpg png等图片不会引发问题
var url = "https://dlsvr04.asus.com.cn/pub/ASUS/mb/07VGA/DRV_VGA_Intel_DCH_TP_W10_64_VER26201006911_20190718R.zip"; var request = (HttpWebRequest)WebRequest.Create(url); try
{
var response = (HttpWebResponse)request.GetResponse(); using (var responseStream = response.GetResponseStream())
{
//此处省去保存流数据的代码,但即使没有任何代码,依然会引起下面的异常
} //**************问题点 此处引发的异常:“System.ObjectDisposedException”(位于 System.dll 中)***************
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
finally
{
request.Abort();
}
}
}
}
请看第31行的问题点虽然这里的异常已经被处理,并不会引起程序崩溃.但当调试运行,大量下载文件的时候输出窗口中出现该异常的大量信息,都快把其它有用的信息淹没了.让人很不爽.那么,这种情况究竟是上面的程序没写好还是.netFramework自身的问题?
如果是上面的程序没写好,应该如何改进?谢谢指教.附: 异常的详细信息System.ObjectDisposedException
HResult=0x80131622
Message=无法访问已释放的对象。
ObjectDisposed_ObjectName_Name
Source=System
StackTrace:
在 System.Net.Sockets.NetworkStream.get_InternalSocket()Message 无法访问已释放的对象。
对象名:“System.Net.TlsStream”。
vs2019(v16.3.6)
.netFramework4.8代码:
using System;
using System.Net;namespace HttpDownloadTest
{
internal static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
private static void Main()
{
HttpDownload();
} private static void HttpDownload()
{
//一个可以下载的东西 试过jpg png等图片不会引发问题
var url = "https://dlsvr04.asus.com.cn/pub/ASUS/mb/07VGA/DRV_VGA_Intel_DCH_TP_W10_64_VER26201006911_20190718R.zip"; var request = (HttpWebRequest)WebRequest.Create(url); try
{
var response = (HttpWebResponse)request.GetResponse(); using (var responseStream = response.GetResponseStream())
{
//此处省去保存流数据的代码,但即使没有任何代码,依然会引起下面的异常
} //**************问题点 此处引发的异常:“System.ObjectDisposedException”(位于 System.dll 中)***************
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
finally
{
request.Abort();
}
}
}
}
请看第31行的问题点虽然这里的异常已经被处理,并不会引起程序崩溃.但当调试运行,大量下载文件的时候输出窗口中出现该异常的大量信息,都快把其它有用的信息淹没了.让人很不爽.那么,这种情况究竟是上面的程序没写好还是.netFramework自身的问题?
如果是上面的程序没写好,应该如何改进?谢谢指教.附: 异常的详细信息System.ObjectDisposedException
HResult=0x80131622
Message=无法访问已释放的对象。
ObjectDisposed_ObjectName_Name
Source=System
StackTrace:
在 System.Net.Sockets.NetworkStream.get_InternalSocket()Message 无法访问已释放的对象。
对象名:“System.Net.TlsStream”。
HttpWebResponse和responseStream两个必须销毁一个,否则系统不会关闭http连接,可能造成连接池泄露。HttpWebResponse可以用using销毁,不过销毁以后,就不能再进行GetResponseStream等操作。
你可以查验你的源码,看是否有这种情况。