Я работаю с Windows Phone SDK 7 и пытаюсь осуществить загрузку файла изображения.Я не могу использовать стандартный объект BitmapImage, потому что мой сервер использует файлы cookie для проверки подлинности с помощью форм, и я, насколько я могу судить, не могу передать элемент управления браузера или объект BitmapImage в контейнер cookie ... (кстати, если есть способдля этого я тоже хотел бы знать - это сделает мой код намного проще!).
Независимо от того, что я пытаюсь сделать, должно быть возможно - я получаю поток ответов, и теперь мне нужно прочитать данные изображения из него.
Howerver
_clientData.BeginRead(_buffer, _currentPosition, _buffer.Length, new AsyncCallback(ReadCallback), null);
Возвращает ошибку:
Specified argument was out of the range of valid values.
Parameter name: count
at MS.Internal.InternalNetworkStream.BeginRead(Byte[] buffer, Int32 offset, Int32 count, AsyncCallback callback, Object state)
at TestCode.ItemViewModel.ReadImageByChunks()
at TestCode.ItemViewModel.ReadCallback(IAsyncResult ar)
at MS.Internal.InternalNetworkStream.StreamAsyncResult.Complete(Int32 bytesProcessed, Boolean synchronously, Exception error)
at MS.Internal.InternalNetworkStream.ReadOperation(Object state)
at MS.Internal.InternalNetworkStream.BeginRead(Byte[] buffer, Int32 offset, Int32 count, AsyncCallback callback, Object state)
at TestCode.ItemViewModel.ReadImageByChunks()
at TestCode.ItemViewModel.<>c__DisplayClassb.<LoadImageFromServer>b__a(IAsyncResult rspAR)
at System.Net.Browser.ClientHttpWebRequest.<>c__DisplayClassa.<InvokeGetResponseCallback>b__8(Object state2)
at System.Threading.ThreadPool.WorkItem.doWork(Object o)
at System.Threading.Timer.ring()
Это не происходит в первый раз через код (когда clientData.Position == 0).Второй раз через него всегда выбрасывается (когда clientData.Position == 4096).
количество равно _buffer.Length.
private void ReadImageByChunks()
{
try
{
_clientData.BeginRead(_buffer, _currentPosition, _buffer.Length, new AsyncCallback(ReadCallback), null);
}
catch (Exception error)
{
int i = 1;
}
}
private void ReadCallback(IAsyncResult ar)
{
try
{
int bytesRead = _clientData.EndRead(ar);
if (bytesRead > 0)
{
_imageStream.Write(_buffer, _currentPosition, bytesRead);
_currentPosition = _currentPosition + bytesRead;
}
if (bytesRead == _buffer.Length)
ReadImageByChunks();
else
{
//do stuff
}
}
catch (Exception error)
{
int i = 1;
}
}
Теперь я несколько раз переписывал этот код, основываясь на собственной интуиции и на коде, найденном в Интернете (но ни один из них не относится к Windows Phone 7).Версия выше смоделирована на этом посте.Но пока не повезло.Любая помощь будет оценена.