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 ()の単なる薄いラッパーです:https ://github.com/mono/mono/blob/master/mcs/class/System/System.Net/HttpWebRequest.cs#L816BeginGetRequestStream ()EndGetRequestStream()

でブロックされる可能性のあるものは何もないWebRequest.Create()ので、UIスレッドからこれを呼び出すのが安全です。

于 2013-03-07T01:12:53.973 に答える