【发布时间】:2016-08-04 11:46:29
【问题描述】:
在我的 C# 程序中,我使用 WebClient 下载一个通常可以正常工作的字符串,但有时我会收到异常“对象引用未设置为对象的实例”。
以下示例显示了代码的相关部分:
String ResponseString = "";
String URITarget = "..... my URI information .....";
using (WebClient WebClientInstance = new WebClient())
{
WebClientInstance.Encoding = System.Text.Encoding.UTF8;
WebClientInstance.Headers.Add("Content-Type", "application/json");
ResponseString = WebClientInstance.DownloadString(URITarget);
}
异常发生在以下代码行:
ResponseString = WebClientInstance.DownloadString(URITarget);
由于我使用的是线程,因此理论上可以从不同线程同时调用具有上述代码的函数,我首先认为问题可能是由线程引起的,因为 WebClient 不是线程安全的。但是在围绕上面的代码实现lock(SendWebClientHTTPRequestThreadLock)之后,并没有带来任何改进:
private Object SendWebClientHTTPRequestThreadLock = new Object();
...
String ResponseString = "";
String URITarget = "..... my URI information .....";
lock (SendWebClientHTTPRequestThreadLock)
{
using (WebClient WebClientInstance = new WebClient())
{
WebClientInstance.Encoding = System.Text.Encoding.UTF8;
WebClientInstance.Headers.Add("Content-Type", "application/json");
ResponseString = WebClientInstance.DownloadString(URITarget);
}
}
WebClientInstance.DownloadString(URITarget) 会不会因为某种原因返回 NULL 而不是实际的或至少是一个空字符串?有什么建议吗?
【问题讨论】:
-
发布的代码不能抛出
NullReferenceException,除非埋在DownloadString的实现中。请发布整个堆栈跟踪,最好给我们minimal, complete and verifiable example,超出您认为相关的范围。 -
返回 NULL 的不是
WebClientInstance.DownloadString(URITarget)。由于某种原因,WebClientInstance本身似乎是null,因此您不能调用它的任何方法。 -
我在我的应用程序中添加了更多逻辑以改进对问题的分析。不幸的是(或幸运的是?),自上周以来,该问题没有再次出现。我会持续关注情况,并会尽快提供更多详细信息。
标签: c# multithreading webclient nullreferenceexception