2

我已经成功地生成了一个异步 Web 请求并为其设置了超时。但是,连接的设置仍在 UI 线程上,GetRequestStream如果没有互联网连接,它似乎会冻结。如何解决这个问题?

private WebRequest getPostLoginRequest (string username, string password)
{
    string postData = string.Format (@"<login><user>{0}</user><password>{1}</password></login>", username, password);
    byte[] buf = Encoding.UTF8.GetBytes (postData);

    var request = HttpWebRequest.Create (String.Format (@"{0}/auth/", baseServiceUrl));
    request.Method = "POST";
    request.ContentType = "application/xml";
    request.ContentLength = buf.Length;
    request.GetRequestStream ().Write (buf, 0, buf.Length);

    return request;
}
4

1 回答 1

0

HttpWebRequest.GetRequestStream()创建到远程服务器的网络连接,因此它可以阻止 - 使用BeginGetRequestStream()

的实现GetRequestStream ()实际上只是围绕BeginGetRequestStream ()/的一个薄包装EndGetRequestStream()https ://github.com/mono/mono/blob/master/mcs/class/System/System.Net/HttpWebRequest.cs#L816

没有什么可以阻止的WebRequest.Create(),所以从 UI 线程调用它是安全的。

于 2013-03-07T01:12:53.973 回答