[不知道为什么,但在调用函数InternetQueryDataAvailable
时会随机产生null ref异常,但没有明显的原因,sins所接受的参数都不能为null:
[DllImport(Dlls.Wininet, SetLastError = true)]
public static extern bool InternetQueryDataAvailable([In] IntPtr hFile, [Out] out int numberOfBytesAvailable, [Optional, In] int reserved0, [Optional, In] IntPtr reserved1);
这里是例外:
[不,CheckHandle()
不是罪魁祸首,因为它所做的只是检查_handle
是否为零,又是无效的。
[此外,如果不是这样,那么在下载所有数据并尝试关闭应用程序之后,我将它设置为在所有应用程序关闭之前关闭所有句柄,对InternetCloseHandle
的调用甚至会抛出null ref异常,与InternetQueryDataAvailable
一样,所有参数都不是可为空的罪孽,它接受的只是一个IntPtr
:
[DllImport(Dlls.Wininet, SetLastError = true)]
public static extern bool InternetCloseHandle([In] IntPtr hInternet);
不知道发生了什么,因为在极少数情况下一切正常,我能够下载所有数据并关闭句柄,而不会引发随机异常。
对于那些想知道InternetCloseHandle的功能是什么样的人,它只是:
public void Dispose()
{
if (_handle != IntPtr.Zero)
{
if (!WinINet.InternetCloseHandle(_handle))
{
throw new Win32Exception();
}
_handle = IntPtr.Zero;
}
}
请注意,在调用InternetQueryDataAvailable
之后引发的异常仅在第一次调用之后发生,因此第一次调用是可以的,但所有之后的调用都有机会触发该异常。
请注意,在调用InternetQueryDataAvailable之后引发的异常仅在第一次调用之后发生,因此第一次调用就可以,但是所有之后的调用都有机会触发该异常。
这是预料之中的。这是一次数据检索。这些可以always遇到外部异常。如果该功能绕过文件访问或网络操作遍及全球的一半,那就不重要了-这两种情况在黑桃中都有外来的异常可能性。
当然,特定的例外仍然很奇怪。