У меня произошел следующий сбой при использовании MonoTouch на iPad. Я тестировал на iOS 4.2+, и, похоже, это происходит на всех версиях iOS. Это очень трудно воспроизвести, поэтому у меня нет хорошего контрольного примера. Тем не менее, я получил множество сбоев при возобновлении приложения. Вы можете увидеть стек вызовов, полученных для этого сбоя ниже:
Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an object
at System.Net.WebConnection.NextRead () [0x00000] in <filename unknown>:0
at System.Net.WebConnectionStream.ReadAll () [0x00000] in <filename unknown>:0
at System.Net.WebConnectionStream.CheckResponseInBuffer () [0x00000] in <filename unknown>:0
at System.Net.WebConnection.ReadDone (IAsyncResult result) [0x00000] in <filename unknown>:0
У меня весь доступ к сети моего приложения обернут в блоки try / catch, и синхронные соединения происходят в отдельном потоке, поэтому этот стек вызовов поставил меня в тупик!
Если кто-нибудь видел это или знает причину, пожалуйста, дайте мне знать. Если у вас есть предложения по работе, я бы тоже хотел их услышать!
Вот пример стандартной операции потока; имейте в виду, что весь этот код упакован в try / catch:
HttpWebRequest r = new HttpWebRequest(Configuration.MasterRequestUri);
r.UserAgent = Configuration.UserAgent;
r.Method = "POST";
r.ContentType = "application/x-www-form-urlencoded";
r.ContentLength = bytes.Length;
r.Timeout = 10000;
r.ReadWriteTimeout = 10000;
r.CachePolicy = Configuration.CachePolicy;
r.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate");
r.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
Stream s = r.GetRequestStream();
s.Write(bytes, 0, bytes.Length);
s.Flush ();
s.Close ();
WebResponse wr = r.GetResponse();
s = wr.GetResponseStream();
using(StreamReader sr = new StreamReader(s))
{
string responseString = sr.ReadToEnd();
// Parses the string and what not
}