在Windows Phone7中读取流



我正在使用Windows Phone SDK 7,并试图实现图像文件的下载。我不能使用标准的BitmapImage对象,因为我的服务器使用表单认证cookie,我就我所知,没有办法通过浏览器控件或BitmapImage对象的cookie容器…(顺便说一句。如果有办法做到这一点,我也想知道-它会使我的代码更简单!)。

无论如何,我要做的应该是可能的-我得到一个响应流,现在我需要从它读取图像数据。

不管

    _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时)。

count是_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的)。上面的版本是基于这篇文章。但到目前为止还没有运气。任何帮助都会很感激。

不要将索引传递给BeginRead,因为它引用了缓冲区的索引,以便开始写入。当前请求向缓冲区边界外写入数据。

将_currentPosition替换为0,应该可以解决这个问题。实际上,您根本不需要跟踪_currentPosition,因为流保持自己的状态。

相关内容

  • 没有找到相关文章

最新更新